diff options
author | johndoe123 | 2014-03-13 14:31:02 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2018-07-20 06:43:33 +0000 |
commit | fc47ac41ae0b5a7fab6a7dfa29b3e33e1e5df2ac (patch) | |
tree | 4e4c95d4ac35ebced2ad593d674744b3e0dfc28c /engines/illusions/scriptman.cpp | |
parent | bb67c2c2ffdb8794d08fd1937a533caec2465a62 (diff) | |
download | scummvm-rg350-fc47ac41ae0b5a7fab6a7dfa29b3e33e1e5df2ac.tar.gz scummvm-rg350-fc47ac41ae0b5a7fab6a7dfa29b3e33e1e5df2ac.tar.bz2 scummvm-rg350-fc47ac41ae0b5a7fab6a7dfa29b3e33e1e5df2ac.zip |
ILLUSIONS: More work on the script system
Diffstat (limited to 'engines/illusions/scriptman.cpp')
-rw-r--r-- | engines/illusions/scriptman.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/engines/illusions/scriptman.cpp b/engines/illusions/scriptman.cpp new file mode 100644 index 0000000000..922ce605bb --- /dev/null +++ b/engines/illusions/scriptman.cpp @@ -0,0 +1,126 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "illusions/illusions.h" +#include "illusions/scriptman.h" + +namespace Illusions { + +// ActiveScenes + +void ActiveScenes::clear() { + _stack.clear(); +} + +void ActiveScenes::push(uint32 sceneId) { + ActiveScene activeScene; + activeScene._sceneId = sceneId; + activeScene._pauseCtr = 0; + _stack.push(activeScene); +} + +void ActiveScenes::pop() { + _stack.pop(); +} + +void ActiveScenes::pauseActiveScene() { + ++_stack.top()._pauseCtr; +} + +void ActiveScenes::unpauseActiveScene() { + --_stack.top()._pauseCtr; +} + +int ActiveScenes::getActiveScenesCount() { + return _stack.size(); +} + +void ActiveScenes::getActiveSceneInfo(uint index, uint32 *sceneId, int *pauseCtr) { + if (sceneId) + *sceneId = _stack[index]._sceneId; + if (pauseCtr) + *pauseCtr = _stack[index]._pauseCtr; +} + +uint32 ActiveScenes::getCurrentScene() { + if (_stack.size() > 0) + return _stack.top()._sceneId; + return 0; +} + +bool ActiveScenes::isSceneActive(uint32 sceneId) { + for (uint i = 0; i < _stack.size(); ++i) + if (_stack[i]._sceneId == sceneId && _stack[i]._pauseCtr <= 0) + return true; + return false; +} + +// ScriptStack + +ScriptStack::ScriptStack() { + clear(); +} + +void ScriptStack::clear() { + for (uint i = 0; i < 256; ++i) + _stack[i] = (int16)0xEEEE; + _stackPos = 256; +} + +void ScriptStack::push(int16 value) { + --_stackPos; + if (_stackPos > 0) + _stack[_stackPos] = value; +} + +int16 ScriptStack::pop() { + int16 value = 0; + if (_stackPos < 256) { + value = _stack[_stackPos]; + _stack[_stackPos] = (int16)0xEEEE; + ++_stackPos; + } + return value; +} + +int16 ScriptStack::peek() { + int16 value = 0; + if (_stackPos < 256) + value = _stack[_stackPos]; + return value; +} + +// ScriptMan + +ScriptMan::ScriptMan(IllusionsEngine *vm) + : _vm(vm) { +} + +ScriptMan::~ScriptMan() { +} + +void ScriptMan::setSceneIdThreadId(uint32 theSceneId, uint32 theThreadId) { + _theSceneId = theSceneId; + _theThreadId = theThreadId; +} + +} // End of namespace Illusions |