aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/objects/pages/page.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink/objects/pages/page.cpp')
-rw-r--r--engines/pink/objects/pages/page.cpp151
1 files changed, 151 insertions, 0 deletions
diff --git a/engines/pink/objects/pages/page.cpp b/engines/pink/objects/pages/page.cpp
new file mode 100644
index 0000000000..6eb9ff2b8b
--- /dev/null
+++ b/engines/pink/objects/pages/page.cpp
@@ -0,0 +1,151 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <engines/pink/objects/walk/walk_mgr.h>
+#include <engines/pink/objects/handlers/handler.h>
+#include "game_page.h"
+#include "engines/pink/cursor_mgr.h"
+#include "engines/pink/objects/actors/lead_actor.h"
+#include "engines/pink/objects/sequences/sequencer.h"
+
+namespace Pink {
+
+void Page::load(Archive &archive) {
+ archive.mapObject(this);
+ NamedObject::deserialize(archive);
+ archive.readString(); //skip directory
+ archive >> _actors;
+}
+
+Actor *Page::findActor(Common::String &name) {
+ return *Common::find_if(_actors.begin(), _actors.end(), [&name]
+ (Actor *actor) {
+ return name == actor->getName();
+ });;
+}
+
+Sound *Page::loadSound(Common::String &fileName) {
+ return _resMgr.loadSound(fileName);
+}
+
+void Page::toConsole() {
+ for (int i = 0; i < _actors.size(); ++i) {
+ _actors[i]->toConsole();
+ }
+}
+
+
+void GamePage::deserialize(Archive &archive) {
+ Page::deserialize(archive);
+ _module = static_cast<Module*>(archive.readObject());
+ assert(dynamic_cast<Module*>(_module) != 0);
+}
+
+void GamePage::load(Archive &archive) {
+ archive.mapObject(_cursorMgr);
+ archive.mapObject(_walkMgr);
+ archive.mapObject(_sequencer);
+
+ Page::load(archive);
+
+ _leadActor = static_cast<LeadActor*>(archive.readObject());
+
+ _walkMgr->deserialize(archive);
+
+ _sequencer->deserialize(archive);
+ archive >> _handlers;
+}
+
+void GamePage::init(bool isLoadingSave) {
+
+ if (!isLoadingSave){
+ //assert(perhapsIsLoaded == 0);
+ loadManagers();
+ }
+
+ toConsole();
+
+ for (int i = 0; i < _actors.size(); ++i) {
+ _actors[i]->init(0);
+ }
+
+ if (!isLoadingSave) {
+ for (uint i = 0; i < _handlers.size(); ++i) {
+ if (_handlers[i]->isSuitable(_leadActor)){
+ HandlerSequences *handlerSequences = dynamic_cast<HandlerSequences*>(_handlers[i]);
+ assert(handlerSequences);
+ handlerSequences->init(_leadActor);
+ break;
+ }
+ }
+
+ }
+
+}
+
+void GamePage::loadManagers() {
+ perhapsIsLoaded = true;
+ _cursorMgr = new CursorMgr(this);
+ _walkMgr = new WalkMgr;
+ _sequencer = new Sequencer(this);
+
+ _resMgr.init(_module->getGame(), this);
+
+ // memfile manipulations if from save or page changing
+
+}
+
+PinkEngine *GamePage::getGame() {
+ return _module->getGame();
+}
+
+Sequencer *GamePage::getSequencer() {
+ return _sequencer;
+}
+
+Module *GamePage::getModule() const {
+ return _module;
+}
+
+bool GamePage::checkValueOfVariable(Common::String &variable, Common::String &value) {
+ assert(_variables.contains(variable));
+ return _variables[variable] == value;
+}
+
+void GamePage::setVariable(Common::String &variable, Common::String &value) {
+ _variables[variable] = value;
+}
+
+WalkMgr *GamePage::getWalkMgr() {
+ return _walkMgr;
+}
+
+void GamePage::toConsole() {
+ Page::toConsole();
+ _walkMgr->toConsole();
+ _sequencer->toConsole();
+ for (int i = 0; i < _handlers.size(); ++i) {
+ _handlers[i]->toConsole();
+ }
+}
+
+} // End of namespace Pink