summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/script_system.cpp21
-rw-r--r--src/script_system.h1
2 files changed, 16 insertions, 6 deletions
diff --git a/src/script_system.cpp b/src/script_system.cpp index 14d247e..fcc7ab5 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp
@@ -201,7 +201,6 @@ void ScriptSystem::tick(double dt) {
201 201
202 if (!*callable_) { 202 if (!*callable_) {
203 callable_.reset(); 203 callable_.reset();
204 runner_.reset();
205 } 204 }
206 } 205 }
207} 206}
@@ -212,8 +211,7 @@ void ScriptSystem::runScript(std::string mapName, std::string scriptName) {
212 loadedScripts_.insert(mapName); 211 loadedScripts_.insert(mapName);
213 } 212 }
214 213
215 runner_.reset(new sol::thread(sol::thread::create(engine_.lua_state()))); 214 callable_.reset(new sol::coroutine(engine_.traverse_get<sol::function>(mapName, scriptName)));
216 callable_.reset(new sol::coroutine(runner_->state().traverse_get<sol::function>(mapName, scriptName)));
217 215
218 if (!*callable_) { 216 if (!*callable_) {
219 throw std::runtime_error("Error running script: " + mapName + "." + scriptName); 217 throw std::runtime_error("Error running script: " + mapName + "." + scriptName);
@@ -227,14 +225,27 @@ void ScriptSystem::runScript(std::string mapName, std::string scriptName) {
227 225
228 if (!*callable_) { 226 if (!*callable_) {
229 callable_.reset(); 227 callable_.reset();
230 runner_.reset();
231 } 228 }
232} 229}
233 230
234void ScriptSystem::runDebugScript(std::string script) { 231void ScriptSystem::runDebugScript(std::string script) {
235 auto result = engine_.script(script); 232 sol::load_result loaded_script = engine_.load(script);
233
234 callable_.reset(new sol::coroutine(loaded_script));
235
236 if (!*callable_) {
237 std::cout << "Error running debug command: " << script << std::endl;
238 return;
239 }
240
241 auto result = (*callable_)();
236 if (!result.valid()) { 242 if (!result.valid()) {
237 sol::error e = result; 243 sol::error e = result;
238 std::cout << e.what() << std::endl; 244 std::cout << e.what() << std::endl;
245 return;
246 }
247
248 if (!*callable_) {
249 callable_.reset();
239 } 250 }
240} 251}
diff --git a/src/script_system.h b/src/script_system.h index 686415c..2d099e3 100644 --- a/src/script_system.h +++ b/src/script_system.h
@@ -26,7 +26,6 @@ private:
26 26
27 Game& game_; 27 Game& game_;
28 sol::state engine_; 28 sol::state engine_;
29 std::unique_ptr<sol::thread> runner_;
30 std::unique_ptr<sol::coroutine> callable_; 29 std::unique_ptr<sol::coroutine> callable_;
31 std::set<std::string> loadedScripts_; 30 std::set<std::string> loadedScripts_;
32}; 31};