diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-24 22:19:00 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-24 22:19:00 -0500 |
commit | e4251457fa46d22071c034e04d1f5ac53ba29593 (patch) | |
tree | 8b61201a9a2d109041a298fa8ae43ae2f03cda3f /src/script_system.cpp | |
parent | 4effe126d5b04d7e8572f8d785735a66150aa4ee (diff) | |
download | tanetane-e4251457fa46d22071c034e04d1f5ac53ba29593.tar.gz tanetane-e4251457fa46d22071c034e04d1f5ac53ba29593.tar.bz2 tanetane-e4251457fa46d22071c034e04d1f5ac53ba29593.zip |
Added map init scripts
Map scripts also now actually run in their own lua thread.
Diffstat (limited to 'src/script_system.cpp')
-rw-r--r-- | src/script_system.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/script_system.cpp b/src/script_system.cpp index 2e02edf..d700738 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp | |||
@@ -206,15 +206,25 @@ void ScriptSystem::tick(double dt) { | |||
206 | }); | 206 | }); |
207 | } | 207 | } |
208 | 208 | ||
209 | void ScriptSystem::runScript(std::string mapName, std::string scriptName) { | 209 | void ScriptSystem::loadMapScripts(std::string mapName) { |
210 | if (!loadedScripts_.count(mapName)) { | 210 | if (!loadedScripts_.count(mapName)) { |
211 | engine_.script_file("../res/scripts/" + mapName + ".lua"); | 211 | engine_.script_file("../res/scripts/" + mapName + ".lua"); |
212 | loadedScripts_.insert(mapName); | 212 | loadedScripts_.insert(mapName); |
213 | } | 213 | } |
214 | } | ||
215 | |||
216 | bool ScriptSystem::mapHasScript(std::string mapName, std::string scriptName) { | ||
217 | loadMapScripts(mapName); | ||
218 | |||
219 | return !!engine_.traverse_get<sol::function>(mapName, scriptName); | ||
220 | } | ||
221 | |||
222 | void ScriptSystem::runScript(std::string mapName, std::string scriptName) { | ||
223 | loadMapScripts(mapName); | ||
214 | 224 | ||
215 | Script newScript; | 225 | Script newScript; |
216 | newScript.runner.reset(new sol::thread(sol::thread::create(engine_.lua_state()))); | 226 | newScript.runner.reset(new sol::thread(sol::thread::create(engine_.lua_state()))); |
217 | newScript.callable.reset(new sol::coroutine(engine_.traverse_get<sol::function>(mapName, scriptName))); | 227 | newScript.callable.reset(new sol::coroutine(newScript.runner->state().traverse_get<sol::function>(mapName, scriptName))); |
218 | 228 | ||
219 | if (!*newScript.callable) { | 229 | if (!*newScript.callable) { |
220 | throw std::runtime_error("Error running script: " + mapName + "." + scriptName); | 230 | throw std::runtime_error("Error running script: " + mapName + "." + scriptName); |