aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood/gamemodule.cpp
diff options
context:
space:
mode:
authorjohndoe1232012-10-19 13:55:37 +0000
committerWillem Jan Palenstijn2013-05-08 20:47:32 +0200
commit2e32b32808304a172844d835934e7aae6b8cd76f (patch)
treee03ca2d39172207d970305631cc4bb5a6a1b0504 /engines/neverhood/gamemodule.cpp
parentef8f0215cfa6287c5d45fef54f040276d95de9b2 (diff)
downloadscummvm-rg350-2e32b32808304a172844d835934e7aae6b8cd76f.tar.gz
scummvm-rg350-2e32b32808304a172844d835934e7aae6b8cd76f.tar.bz2
scummvm-rg350-2e32b32808304a172844d835934e7aae6b8cd76f.zip
NEVERHOOD: Start with the MenuModule
Diffstat (limited to 'engines/neverhood/gamemodule.cpp')
-rw-r--r--engines/neverhood/gamemodule.cpp65
1 files changed, 64 insertions, 1 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 80e6fbeaad..d87096df2d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -23,6 +23,7 @@
#include "neverhood/gamemodule.h"
#include "neverhood/graphics.h"
+#include "neverhood/menumodule.h"
#include "neverhood/module1000.h"
#include "neverhood/module1100.h"
#include "neverhood/module1200.h"
@@ -68,8 +69,13 @@ static const uint32 kRadioMusicFileHashes[] = {
0x03322020
};
+enum {
+ MENU_MODULE = 9999
+};
+
GameModule::GameModule(NeverhoodEngine *vm)
- : Module(vm, NULL), _moduleNum(-1) {
+ : Module(vm, NULL), _moduleNum(-1), _prevChildObject(NULL), _prevModuleNum(-1),
+ _mainMenuRequested(false), _gameWasLoaded(false) {
// Other initializations moved to actual engine class
// TODO
@@ -117,6 +123,13 @@ void GameModule::handleMouseUp(int16 x, int16 y) {
}
}
+void GameModule::handleEscapeKey() {
+ if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
+ _mainMenuRequested = true;
+ else
+ sendMessage(_childObject, 0x000C, 0);
+}
+
void GameModule::handleSpaceKey() {
if (_childObject) {
debug(2, "GameModule::handleSpaceKey()");
@@ -418,6 +431,11 @@ void GameModule::startup() {
#endif
}
+void GameModule::checkMainMenu() {
+ if (_mainMenuRequested)
+ openMainMenu();
+}
+
void GameModule::createModule(int moduleNum, int which) {
debug("GameModule::createModule(%d, %d)", moduleNum, which);
_moduleNum = moduleNum;
@@ -771,4 +789,49 @@ void GameModule::updateModule() {
}
}
+void GameModule::openMainMenu() {
+ if (_childObject) {
+ sendMessage(_childObject, 0x101D, 0);
+ _childObject->draw();
+ } else {
+ // If there's no module, create one so there's something to return to
+ createModule(1000, 0);
+ }
+ // TODO Save FPS, Smacker handle, screen offsets, collisition sprites
+ _mainMenuRequested = false;
+ createMenuModule();
+}
+
+void GameModule::createMenuModule() {
+ if (!_prevChildObject) {
+ _prevChildObject = _childObject;
+ _prevModuleNum = _moduleNum;
+ _childObject = new MenuModule(_vm, this, 0);
+ _childObject->handleUpdate();
+ SetUpdateHandler(&GameModule::updateMenuModule);
+ }
+}
+
+void GameModule::updateMenuModule() {
+ if (!updateChild()) {
+ // TODO Restore FPS?
+ _childObject = _prevChildObject;
+ // TODO Restore Smacker handle, screen offsets, collision sprites
+ sendMessage(_childObject, 0x101E, 0); // TODO CHECKME Is this needed?
+ _prevChildObject = NULL;
+ _moduleNum = _prevModuleNum;
+ SetUpdateHandler(&GameModule::updateModule);
+ } else if (_gameWasLoaded) {
+ debug("_gameWasLoaded!");
+ _gameWasLoaded = false;
+ delete _childObject;
+ delete _prevChildObject;
+ _childObject = NULL;
+ _prevChildObject = NULL;
+ _prevModuleNum = 0;
+ // TODO Create module from savegame values...
+ // TODO createModuleByHash(...);
+ }
+}
+
} // End of namespace Neverhood