diff options
Diffstat (limited to 'engines/pink/objects/handlers')
-rw-r--r-- | engines/pink/objects/handlers/handler.cpp | 11 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler.h | 4 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler_mgr.cpp | 9 | ||||
-rw-r--r-- | engines/pink/objects/handlers/handler_mgr.h | 3 |
4 files changed, 25 insertions, 2 deletions
diff --git a/engines/pink/objects/handlers/handler.cpp b/engines/pink/objects/handlers/handler.cpp index a848cfd98e..8916bc0b3b 100644 --- a/engines/pink/objects/handlers/handler.cpp +++ b/engines/pink/objects/handlers/handler.cpp @@ -37,7 +37,7 @@ void Handler::deserialize(Archive &archive) { archive >> _sideEffects; } -bool Handler::isSuitable(LeadActor *actor) { +bool Handler::isSuitable(Actor *actor) { for (int i = 0; i < _conditions.size(); ++i) { if (!_conditions[i]->evaluate(actor)){ return false; @@ -56,6 +56,15 @@ void Handler::onMessage(LeadActor *actor) { executeSideEffects(actor); } +Handler::~Handler() { + for (int i = 0; i < _sideEffects.size(); ++i) { + delete _sideEffects[i]; + } + for (int i = 0; i < _conditions.size(); ++i) { + delete _conditions[i]; + } +} + void HandlerSequences::deserialize(Archive &archive) { Handler::deserialize(archive); archive >> _sequences; diff --git a/engines/pink/objects/handlers/handler.h b/engines/pink/objects/handlers/handler.h index b2e5fcf2d7..ed42ed7cde 100644 --- a/engines/pink/objects/handlers/handler.h +++ b/engines/pink/objects/handlers/handler.h @@ -33,12 +33,14 @@ namespace Pink { class Condition; class SideEffect; class LeadActor; +class Actor; class Handler : public Object { public: + ~Handler(); virtual void deserialize(Archive &archive); virtual void onMessage(LeadActor *actor); - bool isSuitable(LeadActor *actor); + bool isSuitable(Actor *actor); protected: void executeSideEffects(LeadActor *actor); diff --git a/engines/pink/objects/handlers/handler_mgr.cpp b/engines/pink/objects/handlers/handler_mgr.cpp index 6e7755a804..83236de6a1 100644 --- a/engines/pink/objects/handlers/handler_mgr.cpp +++ b/engines/pink/objects/handlers/handler_mgr.cpp @@ -27,4 +27,13 @@ void HandlerMgr::toConsole() { } } +bool HandlerMgr::isLeftClickHandler(Actor *actor) { + for (int i = 0; i < _leftClickHandlers.size(); ++i) { + if (_leftClickHandlers[i]->isSuitable(actor)) + return true; + } + + return false; +} + } diff --git a/engines/pink/objects/handlers/handler_mgr.h b/engines/pink/objects/handlers/handler_mgr.h index 0de44cf004..f939d592da 100644 --- a/engines/pink/objects/handlers/handler_mgr.h +++ b/engines/pink/objects/handlers/handler_mgr.h @@ -31,6 +31,7 @@ namespace Pink { class HandlerLeftClick; class HandlerUseClick; class HandlerTimer; +class Actor; class HandlerMgr : public Object { public: @@ -38,6 +39,8 @@ public: virtual void toConsole(); + bool isLeftClickHandler(Actor *actor); + private: Common::Array<HandlerLeftClick*> _leftClickHandlers; Common::Array<HandlerUseClick*> _useClickHandlers; |