[Scummvm-cvs-logs] SF.net SVN: scummvm:[45285] scummvm/trunk/engines/lure
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Tue Oct 20 21:51:57 CEST 2009
Revision: 45285
http://scummvm.svn.sourceforge.net/scummvm/?rev=45285&view=rev
Author: fingolfin
Date: 2009-10-20 19:51:57 +0000 (Tue, 20 Oct 2009)
Log Message:
-----------
LURE: Turn HotspotTickHandlers into a proper class; convert static vars in various of its methods to member vars
Modified Paths:
--------------
scummvm/trunk/engines/lure/hotspots.cpp
scummvm/trunk/engines/lure/hotspots.h
Modified: scummvm/trunk/engines/lure/hotspots.cpp
===================================================================
--- scummvm/trunk/engines/lure/hotspots.cpp 2009-10-20 19:51:32 UTC (rev 45284)
+++ scummvm/trunk/engines/lure/hotspots.cpp 2009-10-20 19:51:57 UTC (rev 45285)
@@ -76,7 +76,7 @@
_override = resources.getHotspotOverride(res->hotspotId);
setAnimation(_data->animRecordId);
- _tickHandler = HotspotTickHandlers::getHandler(_data->tickProcId);
+ _tickHandler = _tickHandlers.getHandler(_data->tickProcId);
_nameBuffer[0] = '\0';
_skipFlag = false;
@@ -128,7 +128,7 @@
_frameCtr = 0;
_voiceCtr = 40;
- _tickHandler = HotspotTickHandlers::getHandler(VOICE_TICK_PROC_ID);
+ _tickHandler = _tickHandlers.getHandler(VOICE_TICK_PROC_ID);
setAnimationIndex(VOICE_ANIM_INDEX);
break;
@@ -148,7 +148,7 @@
_voiceCtr = CONVERSE_COUNTDOWN_SIZE;
_destHotspotId = character->hotspotId();
- _tickHandler = HotspotTickHandlers::getHandler(PUZZLED_TICK_PROC_ID);
+ _tickHandler = _tickHandlers.getHandler(PUZZLED_TICK_PROC_ID);
setAnimationIndex(VOICE_ANIM_INDEX);
setFrameNumber(objType == PUZZLED_ANIM_IDX ? 1 : 2);
@@ -471,7 +471,7 @@
void Hotspot::tick() {
uint16 id = _hotspotId;
debugC(ERROR_BASIC, kLureDebugAnimations, "Hotspot %xh tick begin", id);
- _tickHandler(*this);
+ (_tickHandlers.*_tickHandler)(*this);
debugC(ERROR_BASIC, kLureDebugAnimations, "Hotspot %xh tick end", id);
}
@@ -479,7 +479,7 @@
if (_data)
_data->tickProcId = newVal;
- _tickHandler = HotspotTickHandlers::getHandler(newVal);
+ _tickHandler = _tickHandlers.getHandler(newVal);
}
void Hotspot::walkTo(int16 endPosX, int16 endPosY, uint16 destHotspot) {
@@ -2364,79 +2364,84 @@
/*------------------------------------------------------------------------*/
+HotspotTickHandlers::HotspotTickHandlers() {
+ countdownCtr = 0;
+ ewanXOffset = false;
+}
+
HandlerMethodPtr HotspotTickHandlers::getHandler(uint16 procIndex) {
switch (procIndex) {
case 1:
- return defaultHandler;
+ return &HotspotTickHandlers::defaultHandler;
case STANDARD_CHARACTER_TICK_PROC:
- return standardCharacterAnimHandler;
+ return &HotspotTickHandlers::standardCharacterAnimHandler;
case PLAYER_TICK_PROC_ID:
- return playerAnimHandler;
+ return &HotspotTickHandlers::playerAnimHandler;
case VOICE_TICK_PROC_ID:
- return voiceBubbleAnimHandler;
+ return &HotspotTickHandlers::voiceBubbleAnimHandler;
case PUZZLED_TICK_PROC_ID:
- return puzzledAnimHandler;
+ return &HotspotTickHandlers::puzzledAnimHandler;
case 6:
- return roomExitAnimHandler;
+ return &HotspotTickHandlers::roomExitAnimHandler;
case 7:
case FOLLOWER_TICK_PROC_2:
- return followerAnimHandler;
+ return &HotspotTickHandlers::followerAnimHandler;
case JAILOR_TICK_PROC_ID:
case 10:
- return jailorAnimHandler;
+ return &HotspotTickHandlers::jailorAnimHandler;
case STANDARD_ANIM_2_TICK_PROC:
- return standardAnimHandler2;
+ return &HotspotTickHandlers::standardAnimHandler2;
case STANDARD_ANIM_TICK_PROC:
- return standardAnimHandler;
+ return &HotspotTickHandlers::standardAnimHandler;
case 13:
- return sonicRatAnimHandler;
+ return &HotspotTickHandlers::sonicRatAnimHandler;
case 14:
- return droppingTorchAnimHandler;
+ return &HotspotTickHandlers::droppingTorchAnimHandler;
case 15:
- return playerSewerExitAnimHandler;
+ return &HotspotTickHandlers::playerSewerExitAnimHandler;
case 16:
- return fireAnimHandler;
+ return &HotspotTickHandlers::fireAnimHandler;
case 17:
- return sparkleAnimHandler;
+ return &HotspotTickHandlers::sparkleAnimHandler;
case 18:
- return teaAnimHandler;
+ return &HotspotTickHandlers::teaAnimHandler;
case 19:
- return goewinCaptiveAnimHandler;
+ return &HotspotTickHandlers::goewinCaptiveAnimHandler;
case 20:
- return prisonerAnimHandler;
+ return &HotspotTickHandlers::prisonerAnimHandler;
case 21:
- return catrionaAnimHandler;
+ return &HotspotTickHandlers::catrionaAnimHandler;
case 22:
- return morkusAnimHandler;
+ return &HotspotTickHandlers::morkusAnimHandler;
case 23:
- return grubAnimHandler;
+ return &HotspotTickHandlers::grubAnimHandler;
case 24:
- return barmanAnimHandler;
+ return &HotspotTickHandlers::barmanAnimHandler;
case 25:
- return skorlAnimHandler;
+ return &HotspotTickHandlers::skorlAnimHandler;
case 26:
- return gargoyleAnimHandler;
+ return &HotspotTickHandlers::gargoyleAnimHandler;
case GOEWIN_SHOP_TICK_PROC:
- return goewinShopAnimHandler;
+ return &HotspotTickHandlers::goewinShopAnimHandler;
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
- return skullAnimHandler;
+ return &HotspotTickHandlers::skullAnimHandler;
case 34:
- return dragonFireAnimHandler;
+ return &HotspotTickHandlers::dragonFireAnimHandler;
case 35:
- return castleSkorlAnimHandler;
+ return &HotspotTickHandlers::castleSkorlAnimHandler;
case 36:
- return rackSerfAnimHandler;
+ return &HotspotTickHandlers::rackSerfAnimHandler;
case TALK_TICK_PROC_ID:
- return talkAnimHandler;
+ return &HotspotTickHandlers::talkAnimHandler;
case 38:
- return fighterAnimHandler;
+ return &HotspotTickHandlers::fighterAnimHandler;
case PLAYER_FIGHT_TICK_PROC_ID:
- return playerFightAnimHandler;
+ return &HotspotTickHandlers::playerFightAnimHandler;
default:
error("Unknown tick proc Id %xh for hotspot", procIndex);
}
@@ -3101,7 +3106,6 @@
}
void HotspotTickHandlers::followerAnimHandler(Hotspot &h) {
- static int countdownCtr = 0;
Resources &res = Resources::getReference();
ValueTableData &fields = res.fieldList();
Hotspot *player = res.getActiveHotspot(PLAYER_ID);
@@ -3381,10 +3385,6 @@
}
}
-// Special variables used across multiple calls to talkAnimHandler
-static TalkEntryData *_talkResponse;
-static uint16 talkDestCharacter;
-
void HotspotTickHandlers::talkAnimHandler(Hotspot &h) {
// Talk handler
Resources &res = Resources::getReference();
@@ -3672,7 +3672,6 @@
Room &room = Room::getReference();
BarEntry &barEntry = res.barmanLists().getDetails(h.roomNumber());
Common::RandomSource &rnd = LureEngine::getReference().rnd();
- static bool ewanXOffset = false;
h.handleTalkDialog();
if (h.delayCtr() > 0) {
Modified: scummvm/trunk/engines/lure/hotspots.h
===================================================================
--- scummvm/trunk/engines/lure/hotspots.h 2009-10-20 19:51:32 UTC (rev 45284)
+++ scummvm/trunk/engines/lure/hotspots.h 2009-10-20 19:51:57 UTC (rev 45285)
@@ -36,6 +36,7 @@
#define MAX_NUM_IMPINGING 10
class Hotspot;
+class HotspotTickHandlers;
class Support {
private:
@@ -50,49 +51,61 @@
static bool isCharacterInList(uint16 *lst, int numEntries, uint16 charId);
};
-typedef void(*HandlerMethodPtr)(Hotspot &h);
+typedef void (HotspotTickHandlers::*HandlerMethodPtr)(Hotspot &h);
class HotspotTickHandlers {
private:
+ // Special variable used across multiple calls to followerAnimHandler
+ int countdownCtr;
+
+ // Special variables used across multiple calls to talkAnimHandler
+ TalkEntryData *_talkResponse;
+ uint16 talkDestCharacter;
+
+ // Special variable used across multiple calls to barmanAnimHandler
+ bool ewanXOffset;
+
// Support methods
- static void npcRoomChange(Hotspot &h);
- static void talkEndConversation();
+ void npcRoomChange(Hotspot &h);
+ void talkEndConversation();
// Handler methods
- static void defaultHandler(Hotspot &h);
- static void voiceBubbleAnimHandler(Hotspot &h);
- static void standardAnimHandler(Hotspot &h);
- static void standardAnimHandler2(Hotspot &h);
- static void standardCharacterAnimHandler(Hotspot &h);
- static void puzzledAnimHandler(Hotspot &h);
- static void roomExitAnimHandler(Hotspot &h);
- static void playerAnimHandler(Hotspot &h);
- static void followerAnimHandler(Hotspot &h);
- static void jailorAnimHandler(Hotspot &h);
- static void sonicRatAnimHandler(Hotspot &h);
- static void droppingTorchAnimHandler(Hotspot &h);
- static void playerSewerExitAnimHandler(Hotspot &h);
- static void fireAnimHandler(Hotspot &h);
- static void sparkleAnimHandler(Hotspot &h);
- static void teaAnimHandler(Hotspot &h);
- static void goewinCaptiveAnimHandler(Hotspot &h);
- static void prisonerAnimHandler(Hotspot &h);
- static void catrionaAnimHandler(Hotspot &h);
- static void morkusAnimHandler(Hotspot &h);
- static void talkAnimHandler(Hotspot &h);
- static void grubAnimHandler(Hotspot &h);
- static void barmanAnimHandler(Hotspot &h);
- static void skorlAnimHandler(Hotspot &h);
- static void gargoyleAnimHandler(Hotspot &h);
- static void goewinShopAnimHandler(Hotspot &h);
- static void skullAnimHandler(Hotspot &h);
- static void dragonFireAnimHandler(Hotspot &h);
- static void castleSkorlAnimHandler(Hotspot &h);
- static void rackSerfAnimHandler(Hotspot &h);
- static void fighterAnimHandler(Hotspot &h);
- static void playerFightAnimHandler(Hotspot &h);
+ void defaultHandler(Hotspot &h);
+ void voiceBubbleAnimHandler(Hotspot &h);
+ void standardAnimHandler(Hotspot &h);
+ void standardAnimHandler2(Hotspot &h);
+ void standardCharacterAnimHandler(Hotspot &h);
+ void puzzledAnimHandler(Hotspot &h);
+ void roomExitAnimHandler(Hotspot &h);
+ void playerAnimHandler(Hotspot &h);
+ void followerAnimHandler(Hotspot &h);
+ void jailorAnimHandler(Hotspot &h);
+ void sonicRatAnimHandler(Hotspot &h);
+ void droppingTorchAnimHandler(Hotspot &h);
+ void playerSewerExitAnimHandler(Hotspot &h);
+ void fireAnimHandler(Hotspot &h);
+ void sparkleAnimHandler(Hotspot &h);
+ void teaAnimHandler(Hotspot &h);
+ void goewinCaptiveAnimHandler(Hotspot &h);
+ void prisonerAnimHandler(Hotspot &h);
+ void catrionaAnimHandler(Hotspot &h);
+ void morkusAnimHandler(Hotspot &h);
+ void talkAnimHandler(Hotspot &h);
+ void grubAnimHandler(Hotspot &h);
+ void barmanAnimHandler(Hotspot &h);
+ void skorlAnimHandler(Hotspot &h);
+ void gargoyleAnimHandler(Hotspot &h);
+ void goewinShopAnimHandler(Hotspot &h);
+ void skullAnimHandler(Hotspot &h);
+ void dragonFireAnimHandler(Hotspot &h);
+ void castleSkorlAnimHandler(Hotspot &h);
+ void rackSerfAnimHandler(Hotspot &h);
+ void fighterAnimHandler(Hotspot &h);
+ void playerFightAnimHandler(Hotspot &h);
public:
- static HandlerMethodPtr getHandler(uint16 procIndex);
+ HotspotTickHandlers();
+
+ HandlerMethodPtr getHandler(uint16 procIndex);
};
class WalkingActionEntry {
@@ -171,6 +184,7 @@
class Hotspot {
private:
+ HotspotTickHandlers _tickHandlers;
HotspotData *_data;
uint16 _animId;
HotspotAnimData *_anim;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list