diff options
author | Johannes Schickel | 2007-05-05 12:18:02 +0000 |
---|---|---|
committer | Johannes Schickel | 2007-05-05 12:18:02 +0000 |
commit | 776423ff823c28f0b7ef5929af6caa679b11e067 (patch) | |
tree | ea8e43cb1b46b4cb68aa1a645e0ad27bf5a8c120 /engines/kyra/script.h | |
parent | ae24e0e99f6ae8e7ebc854a3debe691ad963bdf7 (diff) | |
download | scummvm-rg350-776423ff823c28f0b7ef5929af6caa679b11e067.tar.gz scummvm-rg350-776423ff823c28f0b7ef5929af6caa679b11e067.tar.bz2 scummvm-rg350-776423ff823c28f0b7ef5929af6caa679b11e067.zip |
- started to move v1 specific functions to KyraEngine_v1 (just opcodes yet)
- reworked script opcode handling
svn-id: r26749
Diffstat (limited to 'engines/kyra/script.h')
-rw-r--r-- | engines/kyra/script.h | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/engines/kyra/script.h b/engines/kyra/script.h index 67a57e7590..67aef8361c 100644 --- a/engines/kyra/script.h +++ b/engines/kyra/script.h @@ -26,13 +26,39 @@ #include "kyra/kyra.h" namespace Kyra { + +struct ScriptState; + +struct Opcode { + virtual ~Opcode() {} + + virtual operator bool() const = 0; + + virtual int operator()(ScriptState*) const = 0; +}; + +template<class T> +struct OpcodeImpl : public Opcode { + T *vm; + typedef int (T::*Callback)(ScriptState*); + Callback callback; + + OpcodeImpl(T *v, Callback c) : Opcode(), vm(v), callback(c) {} + + operator bool() const { return callback != 0; } + + int operator()(ScriptState *state) const { + return (vm->*callback)(state); + } +}; + struct ScriptData { byte *text; uint16 *data; uint16 *ordr; uint16 dataSize; - - int opcodeTable; // indicates which opcode table to use (for Kyra3 and Kyra2) + + const Common::Array<const Opcode*> *opcodes; }; struct ScriptState { @@ -49,7 +75,7 @@ class ScriptHelper { public: ScriptHelper(KyraEngine *vm); - bool loadScript(const char *filename, ScriptData *data); + bool loadScript(const char *filename, ScriptData *data, const Common::Array<const Opcode*> *opcodes); void unloadScript(ScriptData *data); void initScript(ScriptState *scriptState, const ScriptData *data); |