diff options
author | johndoe123 | 2014-04-07 12:58:26 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-07-20 06:43:33 +0000 |
commit | 3f15233f78a264e45ce74ecd2db9ed3119b1b654 (patch) | |
tree | 821bda821f8b1d0813e271d682c5c42b59103c59 /engines/illusions/illusions_bbdou.h | |
parent | 6ba5570de52344da602cf02fb83725b468e3d8c5 (diff) | |
download | scummvm-rg350-3f15233f78a264e45ce74ecd2db9ed3119b1b654.tar.gz scummvm-rg350-3f15233f78a264e45ce74ecd2db9ed3119b1b654.tar.bz2 scummvm-rg350-3f15233f78a264e45ce74ecd2db9ed3119b1b654.zip |
ILLUSIONS: Refactor code in preparation for the Duckman engine
Diffstat (limited to 'engines/illusions/illusions_bbdou.h')
-rw-r--r-- | engines/illusions/illusions_bbdou.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/engines/illusions/illusions_bbdou.h b/engines/illusions/illusions_bbdou.h new file mode 100644 index 0000000000..cd6d8d7d31 --- /dev/null +++ b/engines/illusions/illusions_bbdou.h @@ -0,0 +1,150 @@ +/* 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. + * + */ + +#ifndef ILLUSIONS_ILLUSIONS_BBDOU_H +#define ILLUSIONS_ILLUSIONS_BBDOU_H + +#include "illusions/illusions.h" +#include "common/algorithm.h" +#include "common/stack.h" + +namespace Illusions { + +class Dictionary; +class ScriptMan; +class ScriptStack; +class TriggerFunctions; +class TriggerFunction; + +typedef Common::Functor2<TriggerFunction*, uint32, void> TriggerFunctionCallback; + +struct TriggerFunction { + uint32 _sceneId; + uint32 _verbId; + uint32 _objectId2; + uint32 _objectId; + TriggerFunctionCallback *_callback; + TriggerFunction(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback); + ~TriggerFunction(); + void run(uint32 callingThreadId); +}; + +class TriggerFunctions { +public: + void add(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback); + TriggerFunction *find(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId); + void removeBySceneId(uint32 sceneId); +public: + typedef Common::List<TriggerFunction*> Items; + typedef Items::iterator ItemsIterator; + Items _triggerFunctions; + ItemsIterator findInternal(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId); +}; + +struct ActiveScene { + uint32 _sceneId; + int _pauseCtr; +}; + +class ActiveScenes { +public: + ActiveScenes(); + void clear(); + void push(uint32 sceneId); + void pop(); + void pauseActiveScene(); + void unpauseActiveScene(); + uint getActiveScenesCount(); + void getActiveSceneInfo(uint index, uint32 *sceneId, int *pauseCtr); + uint32 getCurrentScene(); + bool isSceneActive(uint32 sceneId); +protected: + Common::FixedStack<ActiveScene, 16> _stack; +}; + +class IllusionsEngine_BBDOU : public IllusionsEngine { +public: + IllusionsEngine_BBDOU(OSystem *syst, const ADGameDescription *gd); +protected: + virtual Common::Error run(); + virtual bool hasFeature(EngineFeature f) const; +public: + ScriptMan *_scriptMan; + TriggerFunctions *_triggerFunctions; + + ActiveScenes _activeScenes; + uint32 _prevSceneId; + uint32 _theSceneId; + uint32 _theThreadId; + uint32 _globalSceneId; + + int _pauseCtr; + ScriptStack *_stack; + bool _doScriptThreadInit; + + uint32 _nextTempThreadId; + + bool causeIsDeclared(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId); + void causeDeclare(uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback); + uint32 causeTrigger(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, uint32 callingThreadId); + + void loadSpecialCode(uint32 resId); + void unloadSpecialCode(uint32 resId); + void notifyThreadId(uint32 &threadId); + Control *getObjectControl(uint32 objectId); + Common::Point getNamedPointPosition(uint32 namedPointId); + uint32 getPriorityFromBase(int16 priority); + uint32 getPrevScene(); + uint32 getCurrentScene(); + + void startScriptThreadSimple(uint32 threadId, uint32 callingThreadId); + void startScriptThread(uint32 threadId, uint32 callingThreadId, + uint32 value8, uint32 valueC, uint32 value10); + void startAnonScriptThread(int32 threadId, uint32 callingThreadId, + uint32 value8, uint32 valueC, uint32 value10); + uint32 startAbortableTimerThread(uint32 duration, uint32 threadId); + uint32 startTimerThread(uint32 duration, uint32 threadId); + uint32 startAbortableThread(byte *scriptCodeIp1, byte *scriptCodeIp2, uint32 callingThreadId); + uint32 startTalkThread(int16 duration, uint32 objectId, uint32 talkId, uint32 sequenceId1, + uint32 sequenceId2, uint32 namedPointId, uint32 callingThreadId); + uint32 startTempScriptThread(byte *scriptCodeIp, uint32 callingThreadId, + uint32 value8, uint32 valueC, uint32 value10); + void newScriptThread(uint32 threadId, uint32 callingThreadId, uint notifyFlags, + byte *scriptCodeIp, uint32 value8, uint32 valueC, uint32 value10); + uint32 newTimerThread(uint32 duration, uint32 callingThreadId, bool isAbortable); + uint32 newTempThreadId(); + + bool enterScene(uint32 sceneId, uint32 threadId); + void exitScene(uint32 threadId); + void enterPause(uint32 threadId); + void leavePause(uint32 threadId); + void dumpActiveScenes(uint32 sceneId, uint32 threadId); + + void setSceneIdThreadId(uint32 theSceneId, uint32 theThreadId); + bool findTriggerCause(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, uint32 &codeOffs); + void reset(); + +}; + +} // End of namespace Illusions + +#endif // ILLUSIONS_ILLUSIONS_H |