aboutsummaryrefslogtreecommitdiff
path: root/engines/lure/hotspots.h
diff options
context:
space:
mode:
authorMax Horn2006-02-11 22:45:04 +0000
committerMax Horn2006-02-11 22:45:04 +0000
commit26ee630756ebdd7c96bccede0881a8c8b98e8f2b (patch)
tree26e378d5cf990a2b81c2c96e9e683a7f333b62e8 /engines/lure/hotspots.h
parent2a9a0d4211b1ea5723f1409d91cb95de8984429e (diff)
downloadscummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.gz
scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.bz2
scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.zip
Moved engines to the new engines/ directory
svn-id: r20582
Diffstat (limited to 'engines/lure/hotspots.h')
-rw-r--r--engines/lure/hotspots.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/engines/lure/hotspots.h b/engines/lure/hotspots.h
new file mode 100644
index 0000000000..3483522c96
--- /dev/null
+++ b/engines/lure/hotspots.h
@@ -0,0 +1,137 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2005-2006 The ScummVM project
+ *
+ * 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef __lure_hotspots_h__
+#define __lure_hotspots_h__
+
+#include "lure/luredefs.h"
+#include "lure/screen.h"
+#include "lure/disk.h"
+#include "lure/res_struct.h"
+
+namespace Lure {
+
+class Hotspot;
+
+typedef void(*HandlerMethodPtr)(Hotspot &h);
+
+class HotspotTickHandlers {
+private:
+ static void defaultHandler(Hotspot &h);
+ static void standardAnimHandler(Hotspot &h);
+ static void roomExitAnimHandler(Hotspot &h);
+ static void playerAnimHandler(Hotspot &h);
+ static void droppingTorchAnimHandler(Hotspot &h);
+ static void fireAnimHandler(Hotspot &h);
+ static void headAnimationHandler(Hotspot &h);
+
+public:
+ static HandlerMethodPtr getHandler(uint16 procOffset);
+};
+
+
+class Hotspot {
+private:
+ HotspotData *_data;
+ HotspotAnimData *_anim;
+ HandlerMethodPtr _tickHandler;
+ Surface *_frames;
+ int16 _startX, _startY;
+ uint16 _height, _width;
+ uint16 _numFrames;
+ uint16 _frameNumber;
+ uint16 _tickCtr;
+ bool _persistant;
+
+ int16 _destX, _destY;
+ uint16 _destHotspotId;
+public:
+ Hotspot(HotspotData *res);
+ ~Hotspot();
+
+ void setAnimation(uint16 newAnimId);
+ void setAnimation(HotspotAnimData *newRecord);
+ uint16 hotspotId() { return _data->hotspotId; }
+ Surface &frames() { return *_frames; }
+ HotspotAnimData &anim() { return *_anim; }
+ HotspotData &resource() { return *_data; }
+ uint16 numFrames() { return _numFrames; }
+ uint16 frameNumber() { return _frameNumber; }
+ void setFrameNumber(uint16 v) { _frameNumber = v; }
+ void incFrameNumber();
+ uint16 frameWidth() { return _width; }
+ int16 x() { return _startX; }
+ int16 y() { return _startY; }
+ int16 destX() { return _destX; }
+ int16 destY() { return _destY; }
+ uint16 destHotspotId() { return _destHotspotId; }
+ uint16 width() { return _width; }
+ uint16 height() { return _height; }
+ uint16 roomNumber() { return _data->roomNumber; }
+ uint16 script() { return _data->sequenceOffset; }
+ uint8 layer() { return _data->layer; }
+ uint16 tickCtr() { return _tickCtr; }
+ void setTickCtr(uint16 newVal) { _tickCtr = newVal; }
+ void setTickProc(uint16 newVal);
+ bool persistant() { return _persistant; }
+ void setPersistant(bool value) { _persistant = value; }
+ void setRoomNumber(uint16 roomNum) { _data->roomNumber = roomNum; }
+ bool isActiveAnimation();
+ void setPosition(int16 newX, int16 newY);
+ void setDestPosition(int16 newX, int16 newY) { _destX = newX; _destY = newY; }
+ void setSize(uint16 newWidth, uint16 newHeight);
+ void setScript(uint16 offset) { _data->sequenceOffset = offset; }
+ void setActions(uint32 newActions) { _data->actions = newActions; }
+
+ void copyTo(Surface *dest);
+ bool executeScript();
+ void tick();
+ void walkTo(int16 endPosX, int16 endPosY, uint16 destHotspot = 0, bool immediate = false);
+ void setDirection(Direction dir);
+
+ // Action set
+ void doAction(Action action, HotspotData *hotspot);
+ bool isRoomExit(uint16 id);
+ void doGet(HotspotData *hotspot);
+ void doOperate(HotspotData *hotspot, Action action);
+ void doOpen(HotspotData *hotspot);
+ void doClose(HotspotData *hotspot);
+ void doLockUnlock(HotspotData *hotspot);
+ void doUse(HotspotData *hotspot);
+ void doGive(HotspotData *hotspot);
+ void doTalkTo(HotspotData *hotspot);
+ void doTell(HotspotData *hotspot);
+ void doLook();
+ void doLookAt(HotspotData *hotspot);
+ void doAsk(HotspotData *hotspot);
+ void doDrink();
+ void doStatus();
+ void doBribe(HotspotData *hotspot);
+ void doExamine();
+ void doSimple(HotspotData *hotspot, Action action);
+};
+
+typedef ManagedList<Hotspot *> HotspotList;
+
+} // End of namespace Lure
+
+#endif