summary refs log tree commit diff stats
path: root/src/script_system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/script_system.cpp')
-rw-r--r--src/script_system.cpp14
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
209void ScriptSystem::runScript(std::string mapName, std::string scriptName) { 209void 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
216bool ScriptSystem::mapHasScript(std::string mapName, std::string scriptName) {
217 loadMapScripts(mapName);
218
219 return !!engine_.traverse_get<sol::function>(mapName, scriptName);
220}
221
222void 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);