From dac8d2a72b427cdecedfe4a951aa6166ce7b3720 Mon Sep 17 00:00:00 2001 From: whiterandrek Date: Sat, 7 Apr 2018 11:36:09 +0300 Subject: PINK: bugfixes and added basic inventory implementation --- engines/pink/objects/pages/game_page.cpp | 19 ++++++++++--------- engines/pink/objects/pages/game_page.h | 2 +- engines/pink/objects/pages/page.cpp | 13 ++++++++++++- engines/pink/objects/pages/page.h | 4 +++- 4 files changed, 26 insertions(+), 12 deletions(-) (limited to 'engines/pink/objects/pages') diff --git a/engines/pink/objects/pages/game_page.cpp b/engines/pink/objects/pages/game_page.cpp index d12c034d2a..e38bed8da8 100644 --- a/engines/pink/objects/pages/game_page.cpp +++ b/engines/pink/objects/pages/game_page.cpp @@ -32,7 +32,7 @@ namespace Pink { GamePage::GamePage() : _cursorMgr(nullptr), _walkMgr(nullptr), _sequencer(nullptr), - _perhapsIsLoaded(false), _memFile(nullptr) + _isLoaded(false), _memFile(nullptr) {} GamePage::~GamePage() { @@ -64,17 +64,14 @@ void GamePage::load(Archive &archive) { _leadActor = static_cast(archive.readObject()); _walkMgr->deserialize(archive); - _sequencer->deserialize(archive); archive >> _handlers; } void GamePage::init(bool isLoadingSave) { - if (!_perhapsIsLoaded) + if (!_isLoaded) loadManagers(); - getGame()->getDirector()->clear(); - toConsole(); for (int j = 0; j < _actors.size(); ++j) { @@ -108,7 +105,7 @@ bool GamePage::initHandler() { } void GamePage::loadManagers() { - _perhapsIsLoaded = true; + _isLoaded = true; _cursorMgr = new CursorMgr(_module->getGame(), this); _walkMgr = new WalkMgr; _sequencer = new Sequencer(this); @@ -150,6 +147,7 @@ WalkMgr *GamePage::getWalkMgr() { void GamePage::loadState() { Archive archive(static_cast(_memFile)); + _variables.clear(0); archive >> _variables; uint16 actorCount; @@ -165,6 +163,7 @@ void GamePage::loadState() { void GamePage::saveState() { _memFile = new Common::MemoryReadWriteStream(DisposeAfterUse::YES); Archive archive(static_cast(_memFile)); + archive << _variables; archive.writeWORD(_actors.size()); @@ -172,12 +171,14 @@ void GamePage::saveState() { archive.writeString(_actors[i]->getName()); _actors[i]->saveState(archive); } + } void GamePage::unload() { _leadActor->setAction(_leadActor->findAction("Idle")); saveState(); clear(); + _isLoaded = false; } void GamePage::clear() { @@ -187,9 +188,9 @@ void GamePage::clear() { delete _handlers[i]; } _handlers.clear(); - delete _cursorMgr; - delete _sequencer; - delete _walkMgr; + delete _cursorMgr; _cursorMgr = nullptr; + delete _sequencer; _sequencer = nullptr; + delete _walkMgr; _walkMgr = nullptr; } diff --git a/engines/pink/objects/pages/game_page.h b/engines/pink/objects/pages/game_page.h index 79a4bee4db..c4f6dfba82 100644 --- a/engines/pink/objects/pages/game_page.h +++ b/engines/pink/objects/pages/game_page.h @@ -60,7 +60,7 @@ private: void loadState(); void saveState(); - bool _perhapsIsLoaded; + bool _isLoaded; Common::MemoryReadWriteStream *_memFile; Module *_module; CursorMgr *_cursorMgr; diff --git a/engines/pink/objects/pages/page.cpp b/engines/pink/objects/pages/page.cpp index e068367d07..1c0c67e85a 100644 --- a/engines/pink/objects/pages/page.cpp +++ b/engines/pink/objects/pages/page.cpp @@ -38,7 +38,7 @@ void Page::load(Archive &archive) { archive >> _actors; } -Actor *Page::findActor(Common::String &name) { +Actor *Page::findActor(const Common::String &name) { return *Common::find_if(_actors.begin(), _actors.end(), [&name] (Actor *actor) { return name == actor->getName(); @@ -82,6 +82,17 @@ void Page::clear() { _resMgr.clear(); } +void Page::pause() { + for (int i = 0; i < _actors.size(); ++i) { + _actors[i]->pause(); + } +} + +void Page::unpause() { + for (int i = 0; i < _actors.size(); ++i) { + _actors[i]->unpause(); + } +} } // End of namespace Pink diff --git a/engines/pink/objects/pages/page.h b/engines/pink/objects/pages/page.h index b9820fea75..23b060c143 100644 --- a/engines/pink/objects/pages/page.h +++ b/engines/pink/objects/pages/page.h @@ -40,13 +40,15 @@ public: virtual void toConsole(); void load(Archive &archive); - Actor *findActor(Common::String &name); + Actor *findActor(const Common::String &name); LeadActor *getLeadActor(); Sound *loadSound(Common::String &fileName); CelDecoder *loadCel(Common::String &fileName); virtual void clear(); + void pause(); + void unpause(); protected: void init(); -- cgit v1.2.3