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