1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details 2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt 3 4 #include "Lua.h" 5 #include "Pi.h" 6 7 #include "LuaColor.h" 8 #include "LuaConsole.h" 9 #include "LuaConstants.h" 10 #include "LuaDev.h" 11 #include "LuaEconomy.h" 12 #include "LuaEngine.h" 13 #include "LuaEvent.h" 14 #include "LuaFileSystem.h" 15 #include "LuaFormat.h" 16 #include "LuaGame.h" 17 #include "LuaInput.h" 18 #include "LuaJson.h" 19 #include "LuaLang.h" 20 #include "LuaManager.h" 21 #include "LuaMusic.h" 22 #include "LuaNameGen.h" 23 #include "LuaSerializer.h" 24 #include "LuaShipDef.h" 25 #include "LuaSpace.h" 26 #include "LuaTimer.h" 27 #include "LuaVector.h" 28 #include "LuaVector2.h" 29 30 #include "Body.h" 31 #include "SectorView.h" 32 #include "Ship.h" 33 #include "SpaceStation.h" 34 #include "Star.h" 35 #include "SystemView.h" 36 37 #include "galaxy/StarSystem.h" 38 #include "pigui/LuaPiGui.h" 39 #include "scenegraph/Lua.h" 40 41 namespace Lua { 42 43 LuaManager *manager = 0; 44 45 void InitMath(); 46 Init()47 void Init() 48 { 49 manager = new LuaManager(); 50 InitMath(); 51 } 52 Uninit()53 void Uninit() 54 { 55 delete manager; 56 manager = 0; 57 } 58 59 // initialize standalone math types as the "extended standard library" for all lua instances InitMath()60 void InitMath() 61 { 62 LuaVector::Register(manager->GetLuaState()); 63 LuaVector2::Register(manager->GetLuaState()); 64 LuaColor::Register(manager->GetLuaState()); 65 } 66 InitModules()67 void InitModules() 68 { 69 PROFILE_SCOPED() 70 lua_State *l = Lua::manager->GetLuaState(); 71 72 LuaObject<PropertiedObject>::RegisterClass(); 73 74 LuaObject<Body>::RegisterClass(); 75 LuaObject<Ship>::RegisterClass(); 76 LuaObject<SpaceStation>::RegisterClass(); 77 LuaObject<Planet>::RegisterClass(); 78 LuaObject<Star>::RegisterClass(); 79 LuaObject<Player>::RegisterClass(); 80 LuaObject<Missile>::RegisterClass(); 81 LuaObject<CargoBody>::RegisterClass(); 82 LuaObject<ModelBody>::RegisterClass(); 83 LuaObject<HyperspaceCloud>::RegisterClass(); 84 85 LuaObject<StarSystem>::RegisterClass(); 86 LuaObject<SystemPath>::RegisterClass(); 87 LuaObject<SystemView>::RegisterClass(); 88 LuaObject<SectorView>::RegisterClass(); 89 LuaObject<SystemBody>::RegisterClass(); 90 LuaObject<Random>::RegisterClass(); 91 LuaObject<Faction>::RegisterClass(); 92 93 Pi::luaSerializer = new LuaSerializer(); 94 Pi::luaTimer = new LuaTimer(); 95 96 LuaObject<LuaSerializer>::RegisterClass(); 97 LuaObject<LuaTimer>::RegisterClass(); 98 99 LuaConstants::Register(Lua::manager->GetLuaState()); 100 LuaLang::Register(); 101 LuaEngine::Register(); 102 LuaEconomy::Register(); 103 LuaInput::Register(); 104 LuaFileSystem::Register(); 105 LuaJson::Register(); 106 #ifdef ENABLE_SERVER_AGENT 107 LuaServerAgent::Register(); 108 #endif 109 LuaGame::Register(); 110 LuaFormat::Register(); 111 LuaSpace::Register(); 112 LuaShipDef::Register(); 113 LuaMusic::Register(); 114 LuaDev::Register(); 115 // LuaConsole::Register(); 116 117 // XXX sigh 118 SceneGraph::Lua::Init(); 119 120 // XXX load everything. for now, just modules 121 pi_lua_dofile(l, "libs/autoload.lua"); 122 lua_pop(l, 1); 123 124 pi_lua_import(l, "pigui", true); 125 126 pi_lua_import_recursive(l, "pigui.modules"); 127 pi_lua_import_recursive(l, "pigui.views"); 128 129 pi_lua_import_recursive(l, "modules"); 130 131 Pi::luaNameGen = new LuaNameGen(Lua::manager); 132 } 133 UninitModules()134 void UninitModules() 135 { 136 delete Pi::luaNameGen; 137 138 delete Pi::luaSerializer; 139 delete Pi::luaTimer; 140 } 141 142 } // namespace Lua 143