aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/objects/pages
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink/objects/pages')
-rw-r--r--engines/pink/objects/pages/game_page.cpp25
-rw-r--r--engines/pink/objects/pages/game_page.h73
-rw-r--r--engines/pink/objects/pages/page.cpp151
-rw-r--r--engines/pink/objects/pages/page.h58
4 files changed, 307 insertions, 0 deletions
diff --git a/engines/pink/objects/pages/game_page.cpp b/engines/pink/objects/pages/game_page.cpp
new file mode 100644
index 0000000000..58d8830ddc
--- /dev/null
+++ b/engines/pink/objects/pages/game_page.cpp
@@ -0,0 +1,25 @@
+/* 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.
+ *
+ */
+
+namespace Pink {
+
+} // End of namespace Pink \ No newline at end of file
diff --git a/engines/pink/objects/pages/game_page.h b/engines/pink/objects/pages/game_page.h
new file mode 100644
index 0000000000..f92a9662cc
--- /dev/null
+++ b/engines/pink/objects/pages/game_page.h
@@ -0,0 +1,73 @@
+/* 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.
+ *
+ */
+
+#ifndef PINK_GAME_PAGE_H
+#define PINK_GAME_PAGE_H
+
+#include "page.h"
+
+namespace Pink {
+
+class CursorMgr;
+class WalkMgr;
+class Sequencer;
+class Handler;
+
+class GamePage : public Page {
+public:
+ virtual void deserialize(Archive &archive);
+
+ virtual void load(Archive &archive);
+
+ void loadManagers();
+
+ void init(bool isLoadingSave);
+
+ PinkEngine *getGame();
+ Sequencer *getSequencer();
+ WalkMgr *getWalkMgr();
+
+ Module *getModule() const;
+ bool checkValueOfVariable(Common::String &variable, Common::String &value);
+ void setVariable(Common::String &variable, Common::String &value);
+
+ virtual void toConsole();
+
+private:
+ int perhapsIsLoaded;
+ Module *_module;
+ CursorMgr *_cursorMgr;
+ WalkMgr *_walkMgr;
+ Sequencer *_sequencer;
+ Common::Array<Handler *> _handlers;
+ Common::StringMap _variables;
+
+ /*
+ int cunk_1;
+ int memfile;
+ int unk;
+ */
+};
+
+}
+
+#endif //SCUMMVM_GAME_PAGE_H
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
diff --git a/engines/pink/objects/pages/page.h b/engines/pink/objects/pages/page.h
new file mode 100644
index 0000000000..63d45510e5
--- /dev/null
+++ b/engines/pink/objects/pages/page.h
@@ -0,0 +1,58 @@
+/* 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.
+ *
+ */
+
+#ifndef PINK_PAGE_H
+#define PINK_PAGE_H
+
+#include "engines/pink/objects/object.h"
+#include "engines/pink/objects/module.h"
+#include "engines/pink/resource_mgr.h"
+
+namespace Pink {
+
+class Archive;
+class Actor;
+class LeadActor;
+
+class Page : public NamedObject {
+public:
+
+ void load(Archive &archive);
+ Actor *findActor(Common::String &name);
+ Sound* loadSound(Common::String &fileName);
+
+ virtual void toConsole();
+
+protected:
+ Common::Array<Actor*> _actors;
+ ResourceMgr _resMgr;
+ LeadActor *_leadActor;
+
+ /*
+ int unk_1;
+ CString _str;
+ */
+};
+
+} // End of namespace Pink
+
+#endif \ No newline at end of file