diff options
Diffstat (limited to 'engines/lure/hotspots.h')
-rw-r--r-- | engines/lure/hotspots.h | 137 |
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 |