summaryrefslogtreecommitdiff
path: root/src/script/script_instance.cpp
diff options
context:
space:
mode:
authorzuu <zuu@openttd.org>2012-09-21 19:58:18 +0000
committerzuu <zuu@openttd.org>2012-09-21 19:58:18 +0000
commitf3f4c562ff0625df99782af09725391d0f1c0a8a (patch)
tree6c456062b1bf0217a16fc19e4e21f9d505baabec /src/script/script_instance.cpp
parent2e1936b11cfb64f08b43e454a402b6ada276a67a (diff)
downloadopenttd-f3f4c562ff0625df99782af09725391d0f1c0a8a.tar.xz
(svn r24537) -Feature: Scripts can be suspended even if the game is still progressing, thus break-on-log now works also for Game Scripts.
Diffstat (limited to 'src/script/script_instance.cpp')
-rw-r--r--src/script/script_instance.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp
index 95fcf6f0d..dc56c6c1f 100644
--- a/src/script/script_instance.cpp
+++ b/src/script/script_instance.cpp
@@ -54,6 +54,7 @@ ScriptInstance::ScriptInstance(const char *APIName) :
instance(NULL),
is_started(false),
is_dead(false),
+ is_paused(false),
is_save_data_on_stack(false),
suspend(0),
callback(NULL)
@@ -165,6 +166,7 @@ void ScriptInstance::GameLoop()
this->Died();
return;
}
+ if (this->is_paused) return;
this->controller->ticks++;
if (this->suspend < -1) this->suspend++; // Multiplayer suspend, increase up to -1.
@@ -520,10 +522,23 @@ void ScriptInstance::Save()
}
}
-void ScriptInstance::Suspend()
+void ScriptInstance::Pause()
{
+ /* Suspend script. */
HSQUIRRELVM vm = this->engine->GetVM();
Squirrel::DecreaseOps(vm, _settings_game.script.script_max_opcode_till_suspend);
+
+ this->is_paused = true;
+}
+
+void ScriptInstance::Unpause()
+{
+ this->is_paused = false;
+}
+
+bool ScriptInstance::IsPaused()
+{
+ return this->is_paused;
}
/* static */ bool ScriptInstance::LoadObjects(HSQUIRRELVM vm)