aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/pink/cursor_mgr.cpp14
-rw-r--r--engines/pink/cursor_mgr.h13
-rw-r--r--engines/pink/director.cpp11
-rw-r--r--engines/pink/director.h4
-rw-r--r--engines/pink/objects/actors/lead_actor.cpp16
-rw-r--r--engines/pink/objects/actors/lead_actor.h2
-rw-r--r--engines/pink/pda_mgr.cpp3
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() {