diff options
author | Walter van Niftrik | 2019-03-26 23:41:23 +0100 |
---|---|---|
committer | Walter van Niftrik | 2019-03-30 23:18:02 +0100 |
commit | fa7688a93199f25e84d7c39ca232a4f20a629274 (patch) | |
tree | bcb44cb7606e0bd515a69cf3a724061e0408ff14 /engines/adl/adl.h | |
parent | 658af785d1d6cb448e1dcf0251f80e2e9f62794a (diff) | |
download | scummvm-rg350-fa7688a93199f25e84d7c39ca232a4f20a629274.tar.gz scummvm-rg350-fa7688a93199f25e84d7c39ca232a4f20a629274.tar.bz2 scummvm-rg350-fa7688a93199f25e84d7c39ca232a4f20a629274.zip |
ADL: Refactor opcodes
Diffstat (limited to 'engines/adl/adl.h')
-rw-r--r-- | engines/adl/adl.h | 75 |
1 files changed, 44 insertions, 31 deletions
diff --git a/engines/adl/adl.h b/engines/adl/adl.h index 143b07471c..b7a2ff583f 100644 --- a/engines/adl/adl.h +++ b/engines/adl/adl.h @@ -30,6 +30,7 @@ #include "common/hashmap.h" #include "common/hash-str.h" #include "common/func.h" +#include "common/ptr.h" #include "common/scummsys.h" #include "engines/engine.h" @@ -284,35 +285,48 @@ protected: void loadDroppedItemOffsets(Common::ReadStream &stream, byte count); // Opcodes - int o1_isItemInRoom(ScriptEnv &e); - int o1_isMovesGT(ScriptEnv &e); - int o1_isVarEQ(ScriptEnv &e); - int o1_isCurPicEQ(ScriptEnv &e); - int o1_isItemPicEQ(ScriptEnv &e); - - int o1_varAdd(ScriptEnv &e); - int o1_varSub(ScriptEnv &e); - int o1_varSet(ScriptEnv &e); - int o1_listInv(ScriptEnv &e); - int o1_moveItem(ScriptEnv &e); - int o1_setRoom(ScriptEnv &e); - int o1_setCurPic(ScriptEnv &e); - int o1_setPic(ScriptEnv &e); - int o1_printMsg(ScriptEnv &e); - int o1_setLight(ScriptEnv &e); - int o1_setDark(ScriptEnv &e); - int o1_save(ScriptEnv &e); - int o1_restore(ScriptEnv &e); - int o1_restart(ScriptEnv &e); - int o1_quit(ScriptEnv &e); - int o1_placeItem(ScriptEnv &e); - int o1_setItemPic(ScriptEnv &e); - int o1_resetPic(ScriptEnv &e); - template <Direction D> - int o1_goDirection(ScriptEnv &e); - int o1_takeItem(ScriptEnv &e); - int o1_dropItem(ScriptEnv &e); - int o1_setRoomPic(ScriptEnv &e); + typedef Common::SharedPtr<Common::Functor1<ScriptEnv &, int> > Opcode; + + template <class T> + Opcode opcode(int (T::*f)(ScriptEnv &)) { + return Opcode(new Common::Functor1Mem<ScriptEnv &, int, T>(static_cast<T *>(this), f)); + } + + virtual int o_isItemInRoom(ScriptEnv &e); + virtual int o_isMovesGT(ScriptEnv &e); + virtual int o_isVarEQ(ScriptEnv &e); + virtual int o_isCurPicEQ(ScriptEnv &e); + virtual int o_isItemPicEQ(ScriptEnv &e); + + virtual int o_varAdd(ScriptEnv &e); + virtual int o_varSub(ScriptEnv &e); + virtual int o_varSet(ScriptEnv &e); + virtual int o_listInv(ScriptEnv &e); + virtual int o_moveItem(ScriptEnv &e); + virtual int o_setRoom(ScriptEnv &e); + virtual int o_setCurPic(ScriptEnv &e); + virtual int o_setPic(ScriptEnv &e); + virtual int o_printMsg(ScriptEnv &e); + virtual int o_setLight(ScriptEnv &e); + virtual int o_setDark(ScriptEnv &e); + virtual int o_save(ScriptEnv &e); + virtual int o_restore(ScriptEnv &e); + virtual int o_restart(ScriptEnv &e); + virtual int o_quit(ScriptEnv &e); + virtual int o_placeItem(ScriptEnv &e); + virtual int o_setItemPic(ScriptEnv &e); + virtual int o_resetPic(ScriptEnv &e); + virtual int o_takeItem(ScriptEnv &e); + virtual int o_dropItem(ScriptEnv &e); + virtual int o_setRoomPic(ScriptEnv &e); + + virtual int goDirection(ScriptEnv &e, Direction D); + int o_goNorth(ScriptEnv &e) { return goDirection(e, IDI_DIR_NORTH); } + int o_goSouth(ScriptEnv &e) { return goDirection(e, IDI_DIR_SOUTH); } + int o_goEast(ScriptEnv &e) { return goDirection(e, IDI_DIR_EAST); } + int o_goWest(ScriptEnv &e) { return goDirection(e, IDI_DIR_WEST); } + int o_goUp(ScriptEnv &e) { return goDirection(e, IDI_DIR_UP); } + int o_goDown(ScriptEnv &e) { return goDirection(e, IDI_DIR_DOWN); } // Graphics void drawPic(byte pic, Common::Point pos = Common::Point()) const; @@ -357,8 +371,7 @@ protected: bool _textMode; // Opcodes - typedef Common::Functor1<ScriptEnv &, int> Opcode; - Common::Array<const Opcode *> _condOpcodes, _actOpcodes; + Common::Array<Opcode> _condOpcodes, _actOpcodes; // Message strings in data file Common::Array<DataBlockPtr> _messages; // Picture data |