diff options
Diffstat (limited to 'engines/pink/objects/handlers')
-rw-r--r-- | engines/pink/objects/handlers/handler.cpp | 14 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler.h | 14 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler_mgr.cpp | 51 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler_mgr.h | 9 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler_timer.cpp | 6 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler_timer.h | 4 |
6 files changed, 79 insertions, 19 deletions
diff --git a/engines/pink/objects/handlers/handler.cpp b/engines/pink/objects/handlers/handler.cpp index 8916bc0b3b..7c2bcaad8d 100644 --- a/engines/pink/objects/handlers/handler.cpp +++ b/engines/pink/objects/handlers/handler.cpp @@ -46,13 +46,13 @@ bool Handler::isSuitable(Actor *actor) { return true; } -void Handler::executeSideEffects(LeadActor *actor) { +void Handler::executeSideEffects(Actor *actor) { for (int i = 0; i < _sideEffects.size(); ++i) { _sideEffects[i]->execute(actor); } } -void Handler::onMessage(LeadActor *actor) { +void Handler::handle(Actor *actor) { executeSideEffects(actor); } @@ -70,8 +70,8 @@ void HandlerSequences::deserialize(Archive &archive) { archive >> _sequences; } -void HandlerSequences::onMessage(LeadActor *actor) { - Handler::onMessage(actor); +void HandlerSequences::handle(Actor *actor) { + Handler::handle(actor); Sequencer *sequencer = actor->getSequencer(); assert(!_sequences.empty()); @@ -84,10 +84,10 @@ void HandlerSequences::onMessage(LeadActor *actor) { assert(sequence); sequencer->authorSequence(sequence, 0); - handle(sequence); + execute(sequence); } -void HandlerStartPage::handle(Sequence *sequence) { +void HandlerStartPage::execute(Sequence *sequence) { sequence->_unk = 1; } @@ -152,7 +152,7 @@ void HandlerUseClick::toConsole() { } } -void HandlerUseClick::handle(Sequence *sequence) { +void HandlerUseClick::execute(Sequence *sequence) { } diff --git a/engines/pink/objects/handlers/handler.h b/engines/pink/objects/handlers/handler.h index ed42ed7cde..47f9ab8df5 100644 --- a/engines/pink/objects/handlers/handler.h +++ b/engines/pink/objects/handlers/handler.h @@ -39,11 +39,11 @@ class Handler : public Object { public: ~Handler(); virtual void deserialize(Archive &archive); - virtual void onMessage(LeadActor *actor); + virtual void handle(Actor *actor); bool isSuitable(Actor *actor); protected: - void executeSideEffects(LeadActor *actor); + void executeSideEffects(Actor *actor); Common::Array<Condition*> _conditions; Common::Array<SideEffect*> _sideEffects; @@ -54,10 +54,10 @@ class Sequence; class HandlerSequences : public Handler { public: virtual void deserialize(Archive &archive); - virtual void onMessage(LeadActor *actor); + virtual void handle(Actor *actor); protected: - virtual void handle(Sequence *sequence) = 0; + virtual void execute(Sequence *sequence) = 0; Common::StringArray _sequences; }; @@ -67,7 +67,7 @@ public: virtual void toConsole(); private: - virtual void handle(Sequence *sequence); + virtual void execute(Sequence *sequence); }; class HandlerLeftClick : public HandlerSequences { @@ -75,7 +75,7 @@ public: virtual void toConsole(); private: - virtual void handle(Sequence *sequence) {} + virtual void execute(Sequence *sequence) {} }; class HandlerUseClick : public HandlerSequences { @@ -84,7 +84,7 @@ public: virtual void toConsole(); private: - virtual void handle(Sequence *sequence); + virtual void execute(Sequence *sequence); Common::String _inventoryItem; Common::String _recepient; diff --git a/engines/pink/objects/handlers/handler_mgr.cpp b/engines/pink/objects/handlers/handler_mgr.cpp index 83236de6a1..76c2cf6834 100644 --- a/engines/pink/objects/handlers/handler_mgr.cpp +++ b/engines/pink/objects/handlers/handler_mgr.cpp @@ -36,4 +36,55 @@ bool HandlerMgr::isLeftClickHandler(Actor *actor) { return false; } +void HandlerMgr::onTimerMessage(Actor *actor) { + Handler *handler = findSuitableHandlerTimer(actor); + if (handler) + handler->handle(actor); +} + +bool HandlerMgr::onLeftClickMessage(Actor *actor) { + Handler *handler = findSuitableHandlerLeftClick(actor); + if (handler) { + handler->handle(actor); + return 1; + } + return 0; +} + +bool HandlerMgr::onUseClickMessage(Actor *actor) { + Handler *handler = findSuitableHandlerUseClick(actor); + if (handler) { + handler->handle(actor); + return 1; + } + return 0; +} + +Handler *HandlerMgr::findSuitableHandlerTimer(Actor *actor) { + for (int i = 0; i < _timerHandlers.size(); ++i) { + if (_timerHandlers[i]->isSuitable(actor)) + return _timerHandlers[i]; + } + + return nullptr; +} + +Handler *HandlerMgr::findSuitableHandlerLeftClick(Actor *actor) { + for (int i = 0; i < _leftClickHandlers.size(); ++i) { + if (_leftClickHandlers[i]->isSuitable(actor)) + return _leftClickHandlers[i]; + } + + return nullptr; +} + +Handler *HandlerMgr::findSuitableHandlerUseClick(Actor *actor) { + for (int i = 0; i < _useClickHandlers.size(); ++i) { + if (_useClickHandlers[i]->isSuitable(actor)) + return _useClickHandlers[i]; + } + + return nullptr; +} + } diff --git a/engines/pink/objects/handlers/handler_mgr.h b/engines/pink/objects/handlers/handler_mgr.h index f939d592da..08160870da 100644 --- a/engines/pink/objects/handlers/handler_mgr.h +++ b/engines/pink/objects/handlers/handler_mgr.h @@ -28,6 +28,7 @@ namespace Pink { +class Handler; class HandlerLeftClick; class HandlerUseClick; class HandlerTimer; @@ -41,7 +42,15 @@ public: bool isLeftClickHandler(Actor *actor); + void onTimerMessage(Actor *actor); + bool onLeftClickMessage(Actor *actor); + bool onUseClickMessage(Actor *actor); + private: + Handler *findSuitableHandlerTimer(Actor *actor); + Handler *findSuitableHandlerLeftClick(Actor *actor); + Handler *findSuitableHandlerUseClick(Actor *actor); + Common::Array<HandlerLeftClick*> _leftClickHandlers; Common::Array<HandlerUseClick*> _useClickHandlers; Common::Array<HandlerTimer*> _timerHandlers; diff --git a/engines/pink/objects/handlers/handler_timer.cpp b/engines/pink/objects/handlers/handler_timer.cpp index 44d58c2b32..6fdbce1c5f 100644 --- a/engines/pink/objects/handlers/handler_timer.cpp +++ b/engines/pink/objects/handlers/handler_timer.cpp @@ -59,8 +59,8 @@ void HandlerTimerActions::toConsole() { } } -void HandlerTimerActions::onMessage(LeadActor *actor) { - Handler::onMessage(actor); +void HandlerTimerActions::handle(Actor *actor) { + Handler::handle(actor); assert(_actions.size()); if (!actor->isPlaying()){ Common::RandomSource &rnd = actor->getPage()->getGame()->getRnd(); @@ -72,7 +72,7 @@ void HandlerTimerActions::onMessage(LeadActor *actor) { } -void HandlerTimerSequences::handle(Sequence *sequence) { +void HandlerTimerSequences::execute(Sequence *sequence) { debug("HandlerTimerSequences function is not implemented"); } diff --git a/engines/pink/objects/handlers/handler_timer.h b/engines/pink/objects/handlers/handler_timer.h index 1147431e4b..540c7dcc6c 100644 --- a/engines/pink/objects/handlers/handler_timer.h +++ b/engines/pink/objects/handlers/handler_timer.h @@ -42,7 +42,7 @@ class HandlerTimerActions : public HandlerTimer { public: virtual void toConsole(); virtual void deserialize(Archive &archive); - virtual void onMessage(LeadActor *actor); + virtual void handle(Actor *actor); private: Common::StringArray _actions; @@ -53,7 +53,7 @@ class HandlerTimerSequences : public HandlerSequences { //originally it was inhe public: virtual void toConsole(); protected: - virtual void handle(Sequence *sequence); // very big and hard function + virtual void execute(Sequence *sequence); // very big and hard function }; } // End of namespace Pink |