aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/objects/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink/objects/handlers')
-rw-r--r--engines/pink/objects/handlers/handler.cpp11
-rw-r--r--engines/pink/objects/handlers/handler.h4
-rw-r--r--engines/pink/objects/handlers/handler_mgr.cpp9
-rw-r--r--engines/pink/objects/handlers/handler_mgr.h3
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;