mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-13 21:31:53 +00:00
LURE: Turn HotspotTickHandlers into a proper class; convert static vars in various of its methods to member vars
svn-id: r45285
This commit is contained in:
parent
6d9cb7ab14
commit
2df38ec61e
@ -76,7 +76,7 @@ Hotspot::Hotspot(HotspotData *res): _pathFinder(this) {
|
||||
|
||||
_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 @@ Hotspot::Hotspot(Hotspot *character, uint16 objType): _pathFinder(this) {
|
||||
_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 @@ Hotspot::Hotspot(Hotspot *character, uint16 objType): _pathFinder(this) {
|
||||
_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 @@ bool Hotspot::executeScript() {
|
||||
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 @@ void Hotspot::setTickProc(uint16 newVal) {
|
||||
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 @@ void Hotspot::loadFromStream(Common::ReadStream *stream) {
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
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::playerAnimHandler(Hotspot &h) {
|
||||
}
|
||||
|
||||
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 @@ void HotspotTickHandlers::morkusAnimHandler(Hotspot &h) {
|
||||
}
|
||||
}
|
||||
|
||||
// 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 @@ void HotspotTickHandlers::barmanAnimHandler(Hotspot &h) {
|
||||
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) {
|
||||
|
@ -36,6 +36,7 @@ namespace Lure {
|
||||
#define MAX_NUM_IMPINGING 10
|
||||
|
||||
class Hotspot;
|
||||
class HotspotTickHandlers;
|
||||
|
||||
class Support {
|
||||
private:
|
||||
@ -50,49 +51,61 @@ public:
|
||||
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 @@ struct DestStructure {
|
||||
|
||||
class Hotspot {
|
||||
private:
|
||||
HotspotTickHandlers _tickHandlers;
|
||||
HotspotData *_data;
|
||||
uint16 _animId;
|
||||
HotspotAnimData *_anim;
|
||||
|
Loading…
Reference in New Issue
Block a user