diff options
author | whiterandrek | 2018-04-05 08:15:14 +0300 |
---|---|---|
committer | Eugene Sandulenko | 2018-06-28 23:51:32 +0200 |
commit | cad72b1532faa96c68848392766f25a4a58398ab (patch) | |
tree | 04d5e0cbda2aadb79fce35a1ddd45f0f0798f60f /engines/pink/objects/actors | |
parent | 4b7c75607a5d54d95c383fabf381d82d4ac77b94 (diff) | |
download | scummvm-rg350-cad72b1532faa96c68848392766f25a4a58398ab.tar.gz scummvm-rg350-cad72b1532faa96c68848392766f25a4a58398ab.tar.bz2 scummvm-rg350-cad72b1532faa96c68848392766f25a4a58398ab.zip |
PINK: basic walk, left click and seqTimer implementation
Diffstat (limited to 'engines/pink/objects/actors')
-rw-r--r-- | engines/pink/objects/actors/lead_actor.cpp | 46 | ||||
-rw-r--r-- | engines/pink/objects/actors/lead_actor.h | 11 | ||||
-rw-r--r-- | engines/pink/objects/actors/supporting_actor.cpp | 16 | ||||
-rw-r--r-- | engines/pink/objects/actors/supporting_actor.h | 7 |
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; |