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.cpp14
-rw-r--r--engines/pink/objects/handlers/handler.h14
-rw-r--r--engines/pink/objects/handlers/handler_mgr.cpp51
-rw-r--r--engines/pink/objects/handlers/handler_mgr.h9
-rw-r--r--engines/pink/objects/handlers/handler_timer.cpp6
-rw-r--r--engines/pink/objects/handlers/handler_timer.h4
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