aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/objects/actors
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink/objects/actors')
-rw-r--r--engines/pink/objects/actors/lead_actor.cpp46
-rw-r--r--engines/pink/objects/actors/lead_actor.h11
-rw-r--r--engines/pink/objects/actors/supporting_actor.cpp16
-rw-r--r--engines/pink/objects/actors/supporting_actor.h7
4 files changed, 71 insertions, 9 deletions
diff --git a/engines/pink/objects/actors/lead_actor.cpp b/engines/pink/objects/actors/lead_actor.cpp
index c583d9a7c4..faa0d5aada 100644
--- a/engines/pink/objects/actors/lead_actor.cpp
+++ b/engines/pink/objects/actors/lead_actor.cpp
@@ -71,16 +71,20 @@ LeadActor::State LeadActor::getState() const {
void LeadActor::update() {
switch (_state) {
case kReady:
-
_sequencer->update();
- //fall-through intended
+ _cursorMgr->update();
+ break;
case kMoving:
-
+ _walkMgr->update();
_cursorMgr->update();
break;
case kInDialog1:
case kInDialog2:
_sequencer->update();
+ if (!_sequencer->_context){
+ _state = _nextState;
+ _nextState = kUnk_Loading;
+ }
break;
case kInventory:
@@ -136,7 +140,8 @@ void LeadActor::onKeyboardButtonClick(Common::KeyCode code) {
void LeadActor::start(bool isHandler) {
if (isHandler && _state != kPlayingVideo){
- _state = kReady;
+ _state = kInDialog1;
+ _nextState = kReady;
}
updateCursor({0,0});
}
@@ -177,17 +182,19 @@ void LeadActor::onLeftButtonClick(Common::Point point) {
case kReady:
case kMoving: {
Actor *actor = _page->getGame()->getDirector()->getActorByPoint(point);
+
if (this == actor){
// inventory is not implemented
return;
}
+ _recipient = (SupportingActor*) actor;
if (actor->isClickable() &&
- ((SupportingActor*) actor)->isLeftClickHandlers())
-
-
-
-
+ _recipient->isLeftClickHandlers()){
+ _state = kMoving;
+ _nextState = kInDialog1;
+ _walkMgr->start(_walkMgr->findLocation(_recipient->getLocation()));
+ }
break;
}
case kPDA:
@@ -207,6 +214,27 @@ void LeadActor::onMouseOver(Common::Point point, CursorMgr *mgr) {
else Actor::onMouseOver(point, mgr);
}
+void LeadActor::onWalkEnd() {
+ State oldNextState = _nextState;
+ _state = kReady;
+ _nextState = kUnk_Loading;
+ if (_recipient && oldNextState == kInDialog1){
+ // if use click not impl
+ sendLeftClickMessage(_recipient);
+ }
+}
+
+bool LeadActor::sendUseClickMessage(SupportingActor *actor) {
+ return false;
+}
+
+bool LeadActor::sendLeftClickMessage(SupportingActor *actor) {
+ actor->onLeftClickMessage();
+ _nextState = _state != kPlayingVideo ? kReady : kPlayingVideo;
+ _state = kInDialog1;
+ return false;
+}
+
void ParlSqPink::toConsole() {
debug("ParlSqPink: _name = %s", _name.c_str());
for (int i = 0; i < _actions.size(); ++i) {
diff --git a/engines/pink/objects/actors/lead_actor.h b/engines/pink/objects/actors/lead_actor.h
index 208bfaad24..261b5dcf25 100644
--- a/engines/pink/objects/actors/lead_actor.h
+++ b/engines/pink/objects/actors/lead_actor.h
@@ -27,12 +27,15 @@
#include <common/rect.h>
#include "actor.h"
+
namespace Pink {
class CursorMgr;
class WalkMgr;
class Sequencer;
+class SupportingActor;
+
class LeadActor : public Actor {
public:
enum State {
@@ -62,14 +65,22 @@ public:
void onKeyboardButtonClick(Common::KeyCode code);
void onLeftButtonClick(Common::Point point);
void onMouseMove(Common::Point point);
+ void onWalkEnd();
virtual void onMouseOver(Common::Point point, CursorMgr *mgr);
private:
void updateCursor(Common::Point point);
+ bool sendUseClickMessage(SupportingActor *actor);
+ bool sendLeftClickMessage(SupportingActor *actor);
+
State _state;
+ State _nextState;
+
+ SupportingActor *_recipient;
+
CursorMgr *_cursorMgr;
WalkMgr *_walkMgr;
Sequencer *_sequencer;
diff --git a/engines/pink/objects/actors/supporting_actor.cpp b/engines/pink/objects/actors/supporting_actor.cpp
index a7e1b79954..d43f871c6f 100644
--- a/engines/pink/objects/actors/supporting_actor.cpp
+++ b/engines/pink/objects/actors/supporting_actor.cpp
@@ -57,4 +57,20 @@ bool SupportingActor::isLeftClickHandlers() {
return _handlerMgr.isLeftClickHandler(this);
}
+void SupportingActor::onTimerMessage() {
+ _handlerMgr.onTimerMessage(this);
+}
+
+bool SupportingActor::onLeftClickMessage() {
+ return _handlerMgr.onLeftClickMessage(this);
+}
+
+bool SupportingActor::onUseClickMessage() {
+ return _handlerMgr.onUseClickMessage(this);
+}
+
+const Common::String &SupportingActor::getLocation() const {
+ return _location;
+}
+
} // End of namespace Pink \ No newline at end of file
diff --git a/engines/pink/objects/actors/supporting_actor.h b/engines/pink/objects/actors/supporting_actor.h
index bfee083dbd..2888582041 100644
--- a/engines/pink/objects/actors/supporting_actor.h
+++ b/engines/pink/objects/actors/supporting_actor.h
@@ -38,6 +38,13 @@ public:
virtual bool isClickable() { return 1; }
bool isLeftClickHandlers();
+ void onTimerMessage();
+ bool onLeftClickMessage();
+ bool onUseClickMessage();
+
+ const Common::String &getLocation() const;
+
+
private:
HandlerMgr _handlerMgr;
Common::String _location;