diff options
author | johndoe123 | 2012-10-19 13:55:37 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-05-08 20:47:32 +0200 |
commit | 2e32b32808304a172844d835934e7aae6b8cd76f (patch) | |
tree | e03ca2d39172207d970305631cc4bb5a6a1b0504 /engines/neverhood/gamemodule.cpp | |
parent | ef8f0215cfa6287c5d45fef54f040276d95de9b2 (diff) | |
download | scummvm-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.cpp | 65 |
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 |