| 2528 | } |
| 2529 | |
| 2530 | HScriptInstance NewScriptInstance(CompScriptWorld* script_world, HScript script, HInstance instance, uint16_t component_index) |
| 2531 | { |
| 2532 | lua_State* L = script->m_LuaState; |
| 2533 | |
| 2534 | int top = lua_gettop(L); |
| 2535 | (void) top; |
| 2536 | |
| 2537 | ScriptInstance* i = (ScriptInstance *)lua_newuserdata(L, sizeof(ScriptInstance)); |
| 2538 | ResetScriptInstance(i); |
| 2539 | i->m_Script = script; |
| 2540 | |
| 2541 | lua_pushvalue(L, -1); |
| 2542 | i->m_InstanceReference = dmScript::Ref( L, LUA_REGISTRYINDEX ); |
| 2543 | |
| 2544 | lua_newtable(L); |
| 2545 | i->m_ScriptDataReference = dmScript::Ref( L, LUA_REGISTRYINDEX ); |
| 2546 | |
| 2547 | lua_newtable(L); |
| 2548 | i->m_ContextTableReference = dmScript::Ref( L, LUA_REGISTRYINDEX ); |
| 2549 | |
| 2550 | i->m_Instance = instance; |
| 2551 | i->m_ScriptWorld = script_world->m_ScriptWorld; |
| 2552 | i->m_ComponentIndex = component_index; |
| 2553 | i->m_UniqueScriptId = dmScript::GenerateUniqueScriptId(); |
| 2554 | NewPropertiesParams params; |
| 2555 | params.m_ResolvePathCallback = ScriptInstanceResolvePathCB; |
| 2556 | params.m_ResolvePathUserData = (uintptr_t)L; |
| 2557 | params.m_GetURLCallback = ScriptInstanceGetURLCB; |
| 2558 | i->m_Properties = NewProperties(params); |
| 2559 | SetPropertySet(i->m_Properties, PROPERTY_LAYER_DEFAULT, script->m_PropertySet); |
| 2560 | luaL_getmetatable(L, SCRIPTINSTANCE); |
| 2561 | lua_setmetatable(L, -2); |
| 2562 | |
| 2563 | lua_pop(L, 1); |
| 2564 | |
| 2565 | lua_rawgeti(L, LUA_REGISTRYINDEX, i->m_InstanceReference); |
| 2566 | dmScript::SetInstance(L); |
| 2567 | dmScript::InitializeInstance(i->m_ScriptWorld); |
| 2568 | lua_pushnil(L); |
| 2569 | dmScript::SetInstance(L); |
| 2570 | |
| 2571 | assert(top == lua_gettop(L)); |
| 2572 | |
| 2573 | return i; |
| 2574 | } |
| 2575 | |
| 2576 | void DeleteScriptInstance(HScriptInstance script_instance) |
| 2577 | { |
no test coverage detected