aboutsummaryrefslogtreecommitdiff
path: root/engines/adl/adl.h
diff options
context:
space:
mode:
authorWalter van Niftrik2019-03-26 23:41:23 +0100
committerWalter van Niftrik2019-03-30 23:18:02 +0100
commitfa7688a93199f25e84d7c39ca232a4f20a629274 (patch)
treebcb44cb7606e0bd515a69cf3a724061e0408ff14 /engines/adl/adl.h
parent658af785d1d6cb448e1dcf0251f80e2e9f62794a (diff)
downloadscummvm-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.h75
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