diff options
author | johndoe123 | 2014-03-19 23:18:25 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2018-07-20 06:43:33 +0000 |
commit | c99f40c13d945060f489693d3f533b6ce0b54adb (patch) | |
tree | fa4f8c4e973350d5e37d62d3aad5ba0f2b409c01 /engines/illusions/scriptman.cpp | |
parent | 48ef46c02dfeb34706f1060f9443bb31c1a56093 (diff) | |
download | scummvm-rg350-c99f40c13d945060f489693d3f533b6ce0b54adb.tar.gz scummvm-rg350-c99f40c13d945060f489693d3f533b6ce0b54adb.tar.bz2 scummvm-rg350-c99f40c13d945060f489693d3f533b6ce0b54adb.zip |
ILLUSIONS: Implement TimerThread and script opcode
Diffstat (limited to 'engines/illusions/scriptman.cpp')
-rw-r--r-- | engines/illusions/scriptman.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/engines/illusions/scriptman.cpp b/engines/illusions/scriptman.cpp index 95e4ec4454..d94a32316a 100644 --- a/engines/illusions/scriptman.cpp +++ b/engines/illusions/scriptman.cpp @@ -24,6 +24,7 @@ #include "illusions/scriptman.h" #include "illusions/scriptthread.h" #include "illusions/scriptopcodes.h" +#include "illusions/timerthread.h" namespace Illusions { @@ -157,6 +158,14 @@ uint32 ScriptMan::startTempScriptThread(byte *scriptCodeIp, uint32 callingThread return tempThreadId; } +uint32 ScriptMan::startAbortableTimerThread(uint32 duration, uint32 threadId) { + return newTimerThread(duration, threadId, true); +} + +uint32 ScriptMan::startTimerThread(uint32 duration, uint32 threadId) { + return newTimerThread(duration, threadId, false); +} + void ScriptMan::setCurrFontId(uint32 fontId) { _fontId = fontId; } @@ -173,8 +182,8 @@ bool ScriptMan::enterScene(uint32 sceneId, uint32 threadId) { void ScriptMan::newScriptThread(uint32 threadId, uint32 callingThreadId, uint notifyFlags, byte *scriptCodeIp, uint32 value8, uint32 valueC, uint32 value10) { - ScriptThread *scriptThread = new ScriptThread(_vm, threadId, callingThreadId, - notifyFlags, scriptCodeIp, value8, valueC, value10); + ScriptThread *scriptThread = new ScriptThread(_vm, threadId, callingThreadId, notifyFlags, + scriptCodeIp, value8, valueC, value10); _threads->startThread(scriptThread); if (_pauseCtr > 0) scriptThread->pause(); @@ -185,6 +194,14 @@ void ScriptMan::newScriptThread(uint32 threadId, uint32 callingThreadId, uint no } } +uint32 ScriptMan::newTimerThread(uint32 duration, uint32 callingThreadId, bool isAbortable) { + uint32 tempThreadId = newTempThreadId(); + TimerThread *timerThread = new TimerThread(_vm, tempThreadId, callingThreadId, 0, + duration, isAbortable); + _threads->startThread(timerThread); + return tempThreadId; +} + uint32 ScriptMan::newTempThreadId() { uint32 threadId = _nextTempThreadId + 2 * _scriptResource->_codeCount; if (threadId > 65535) { |