bool Engine::Initialize(){ m_screenWidth = 0; m_screenHeight = 0; try { InitializeWindows(m_screenWidth, m_screenHeight); //Use RAII for as much as possible m_Input = new InputSystem; if(!m_Input){ return false; } m_ResourceLoader = new ResourceLoader(); if(!m_ResourceLoader){ return false; } m_Graphics = new GraphicsSystem(m_hwnd, m_ResourceLoader); if(!m_Graphics){ return false; } m_EventManager = EventManager::Get(); if(!m_EventManager){ return false; } m_AudioSystem = new AudioSystem(); if(!m_AudioSystem){ return false; } m_ScriptManager = new ScriptManager(); if(!m_ScriptManager){ return false; } RegisterScriptFunctions(); m_ScriptManager->ExecuteScript("programdata/required.lua"); m_clock = clock(); DGEngineInit(); return true; } catch(std::exception exc){ MessageBoxA(m_hwnd, exc.what(), "Error", MB_OK); } return false; }
BOOL KScriptManager::Load() { BOOL bResult = false; BOOL bRetCode = false; ILuaScriptEx* piScript = NULL; lua_State* pLuaState = NULL; piScript = CreateLuaInterface(&KMemory::LuaAllocator, NULL); KGLOG_PROCESS_ERROR(piScript); bRetCode = RegisterScriptFunctions(piScript); KGLOG_PROCESS_ERROR(bRetCode); piScript->RegisterConstList(g_LuaServerConstList); pLuaState = piScript->GetLuaState(); KGLOG_PROCESS_ERROR(pLuaState); Luna<KScene>::Register(pLuaState); Luna<KHero>::Register(pLuaState); Luna<KPlayer>::Register(pLuaState); Luna<KAILogic>::Register(pLuaState); Luna<KAIState>::Register(pLuaState); Luna<KAIAction>::Register(pLuaState); Luna<KGItem>::Register(pLuaState); Luna<KGLuaItemInfo>::Register(pLuaState); Luna<KBall>::Register(pLuaState); bRetCode = LoadScripts(piScript, SERVER_SCRIPTS_DIR); KGLOG_PROCESS_ERROR(bRetCode); lua_gc(piScript->GetLuaState(), LUA_GCRESTART, 0); lua_gc(piScript->GetLuaState(), LUA_GCSETPAUSE, 100); lua_gc(piScript->GetLuaState(), LUA_GCSETSTEPMUL, 150); KG_COM_RELEASE(m_piScript); m_piScript = piScript; piScript = NULL; bResult = true; Exit0: KG_COM_RELEASE(piScript); return bResult; }
BOOL KScriptManager::Load() { BOOL bResult = false; BOOL bRetCode = false; ILuaScriptEx* piScript = NULL; piScript = CreateLuaInterface(&KMemory::LuaAllocator, NULL); KGLOG_PROCESS_ERROR(piScript); bRetCode = RegisterScriptFunctions(piScript); KGLOG_PROCESS_ERROR(bRetCode); piScript->RegisterConstList(g_LuaCenterConstList); Luna<KGPQ>::Register(piScript->GetLuaState()); Luna<KGlobalCustomDataManager>::Register(piScript->GetLuaState()); Luna<KGlobalSystemValueManager>::Register(piScript->GetLuaState()); Luna<KRole>::Register(piScript->GetLuaState()); Luna<KTong>::Register(piScript->GetLuaState()); Luna<KActivityManager>::Register(piScript->GetLuaState()); Luna<KMentorCenter>::Register(piScript->GetLuaState()); Luna<KMapInfo>::Register(piScript->GetLuaState()); Luna<KMapCopy>::Register(piScript->GetLuaState()); bRetCode = LoadScripts(piScript, CENTER_SCRIPTS_DIR); KGLOG_PROCESS_ERROR(bRetCode); lua_gc(piScript->GetLuaState(), LUA_GCRESTART, 0); lua_gc(piScript->GetLuaState(), LUA_GCSETPAUSE, 100); lua_gc(piScript->GetLuaState(), LUA_GCSETSTEPMUL, 150); KG_COM_RELEASE(m_piScript); m_piScript = piScript; piScript = NULL; bResult = true; Exit0: KG_COM_RELEASE(piScript); return bResult; }