diff options
-rw-r--r-- | engines/pink/cursor_mgr.cpp | 14 | ||||
-rw-r--r-- | engines/pink/cursor_mgr.h | 13 | ||||
-rw-r--r-- | engines/pink/director.cpp | 11 | ||||
-rw-r--r-- | engines/pink/director.h | 4 | ||||
-rw-r--r-- | engines/pink/objects/actors/lead_actor.cpp | 16 | ||||
-rw-r--r-- | engines/pink/objects/actors/lead_actor.h | 2 | ||||
-rw-r--r-- | engines/pink/pda_mgr.cpp | 3 |
7 files changed, 48 insertions, 15 deletions
diff --git a/engines/pink/cursor_mgr.cpp b/engines/pink/cursor_mgr.cpp index 391e45db99..379d46912c 100644 --- a/engines/pink/cursor_mgr.cpp +++ b/engines/pink/cursor_mgr.cpp @@ -29,13 +29,11 @@ namespace Pink { -CursorMgr::CursorMgr(PinkEngine *game, GamePage *page) +CursorMgr::CursorMgr(PinkEngine *game, Page *page) : _actor(nullptr), _page(page), _game(game), _isPlayingAnimation(0), _firstFrameIndex(0) {} -CursorMgr::~CursorMgr() {} - -void CursorMgr::setCursor(uint index, Common::Point point, const Common::String &itemName) { +void CursorMgr::setCursor(uint index, const Common::Point point, const Common::String &itemName) { if (index == kClickableFirstFrameCursor) { startAnimation(index); return hideItem(); @@ -61,7 +59,7 @@ void CursorMgr::setCursor(uint index, Common::Point point, const Common::String assert(dynamic_cast<ActionCEL*>(action)); if (action != _actor->getAction()) { - _actor->setAction(action, 0); + _actor->setAction(action); CelDecoder *decoder = static_cast<ActionCEL*>(action)->getDecoder(); decoder->setX(point.x); decoder->setY(point.y); @@ -85,7 +83,7 @@ void CursorMgr::update() { } } -void CursorMgr::setCursor(Common::String &cursorName, Common::Point point) { +void CursorMgr::setCursor(const Common::String &cursorName, const Common::Point point) { uint index; if (cursorName == kCursorNameExitLeft) index = kExitLeftCursor; @@ -114,4 +112,8 @@ void CursorMgr::startAnimation(int index) { } } +void CursorMgr::setPage(Page *page) { + _page = page; +} + } // End of namespace Pink diff --git a/engines/pink/cursor_mgr.h b/engines/pink/cursor_mgr.h index 4f10d2266a..391fcd3bb6 100644 --- a/engines/pink/cursor_mgr.h +++ b/engines/pink/cursor_mgr.h @@ -33,24 +33,25 @@ namespace Pink { class Actor; class Action; -class GamePage; +class Page; class PinkEngine; class CursorMgr : public Object { public: - CursorMgr(PinkEngine *game, GamePage *page); - ~CursorMgr(); + CursorMgr(PinkEngine *game, Page *page); void update(); - void setCursor(uint index, Common::Point point, const Common::String &itemName); - void setCursor(Common::String &cursorName, Common::Point point); + void setCursor(uint index, const Common::Point point, const Common::String &itemName); + void setCursor(const Common::String &cursorName, const Common::Point point); + + void setPage(Page *page); private: void hideItem(); void startAnimation(int index); Actor *_actor; - GamePage *_page; + Page *_page; PinkEngine *_game; uint _time; diff --git a/engines/pink/director.cpp b/engines/pink/director.cpp index b6f1614f9d..0f208c66e5 100644 --- a/engines/pink/director.cpp +++ b/engines/pink/director.cpp @@ -145,4 +145,15 @@ void Director::pause(bool pause) { } } +void Director::saveStage() { + _savedSprites = _sprites; + _sprites.clear(); +} + +void Director::loadStage() { + assert(_sprites.empty()); + _sprites = _savedSprites; + _savedSprites.clear(); +} + } diff --git a/engines/pink/director.h b/engines/pink/director.h index 053a01a0a2..4574305098 100644 --- a/engines/pink/director.h +++ b/engines/pink/director.h @@ -53,12 +53,16 @@ public: void pause(bool pause); + void saveStage(); + void loadStage(); + bool showBounds; private: void drawSprite(ActionCEL *sprite); OSystem *_system; Common::Array<ActionCEL *> _sprites; + Common::Array<ActionCEL *> _savedSprites; Common::Array<ActionSound *> _sounds; }; diff --git a/engines/pink/objects/actors/lead_actor.cpp b/engines/pink/objects/actors/lead_actor.cpp index 578f77b89c..cf59405f34 100644 --- a/engines/pink/objects/actors/lead_actor.cpp +++ b/engines/pink/objects/actors/lead_actor.cpp @@ -153,10 +153,13 @@ void LeadActor::loadPDA(const Common::String &pageName) { _recipient = nullptr; _nextState = kReady; } - _state = kPDA; if (_state != kInventory) _page->pause(true); - _page->getGame()->getDirector()->clear(); + + _stateBeforePDA = _state; + _state = kPDA; + + _page->getGame()->getDirector()->saveStage(); } _page->getGame()->getPdaMgr().setLead(this); _page->getGame()->getPdaMgr().goToPage(pageName); @@ -296,6 +299,15 @@ void LeadActor::onWalkEnd() { } } +void LeadActor::onPDAClose() { + _page->initPallete(); + _page->getGame()->getDirector()->loadStage(); + + _state = _stateBeforePDA; + if (_state != kInventory) + _page->pause(0); +} + bool LeadActor::isInteractingWith(Actor *actor) { if (!_isHaveItem) return actor->isLeftClickHandlers(); diff --git a/engines/pink/objects/actors/lead_actor.h b/engines/pink/objects/actors/lead_actor.h index 65eb89b717..5428d48e91 100644 --- a/engines/pink/objects/actors/lead_actor.h +++ b/engines/pink/objects/actors/lead_actor.h @@ -79,6 +79,7 @@ public: virtual void onVariableSet(); void onInventoryClosed(bool isItemClicked); void onWalkEnd(); + void onPDAClose(); bool isInteractingWith(Actor *actor); @@ -105,6 +106,7 @@ protected: State _state; State _nextState; State _stateCopy; + State _stateBeforePDA; bool _isHaveItem; }; diff --git a/engines/pink/pda_mgr.cpp b/engines/pink/pda_mgr.cpp index a931f3096b..9cce204ad8 100644 --- a/engines/pink/pda_mgr.cpp +++ b/engines/pink/pda_mgr.cpp @@ -23,6 +23,7 @@ #include "pink/pda_mgr.h" #include "pink/pink.h" #include "pink/objects/actors/pda_button_actor.h" +#include "pink/objects/actors/lead_actor.h" #include "pink/objects/pages/pda_page.h" @@ -79,7 +80,7 @@ void PDAMgr::close() { delete _page; _page = nullptr; - //_lead->onPDAClose(); + _lead->onPDAClose(); } void PDAMgr::loadGlobal() { |