diff options
author | Nicola Mettifogo | 2007-11-01 14:47:33 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2007-11-01 14:47:33 +0000 |
commit | 7c8bf86a45ec09275484813803df5370d7867d20 (patch) | |
tree | 7594ef0909788034a5c656609b3c39f28ec345e1 | |
parent | 288f47e0341bd80302ef5585f6ef0da67d2738f5 (diff) | |
download | scummvm-rg350-7c8bf86a45ec09275484813803df5370d7867d20.tar.gz scummvm-rg350-7c8bf86a45ec09275484813803df5370d7867d20.tar.bz2 scummvm-rg350-7c8bf86a45ec09275484813803df5370d7867d20.zip |
More refactoring for gui code.
svn-id: r29355
-rw-r--r-- | engines/parallaction/callables_ns.cpp | 6 | ||||
-rw-r--r-- | engines/parallaction/gui_ns.cpp | 100 | ||||
-rw-r--r-- | engines/parallaction/parallaction.h | 14 | ||||
-rw-r--r-- | engines/parallaction/parallaction_ns.cpp | 12 | ||||
-rw-r--r-- | engines/parallaction/saveload.cpp | 19 |
5 files changed, 83 insertions, 68 deletions
diff --git a/engines/parallaction/callables_ns.cpp b/engines/parallaction/callables_ns.cpp index c2ace3e3f0..f35c986671 100644 --- a/engines/parallaction/callables_ns.cpp +++ b/engines/parallaction/callables_ns.cpp @@ -434,7 +434,8 @@ void Parallaction_ns::_c_finito(void *parm) { _gfx->updateScreen(); waitUntilLeftClick(); - guiSelectCharacter(); + selectCharacterForNewLocation(); + _engineFlags |= kEngineChangeLocation; } // this code saves main character animation from being removed from the following code @@ -547,7 +548,8 @@ void Parallaction_ns::_c_endIntro(void *parm) { waitUntilLeftClick(); _engineFlags &= ~kEngineBlockInput; - guiSelectCharacter(); + selectCharacterForNewLocation(); + _engineFlags |= kEngineChangeLocation; } else { waitUntilLeftClick(); } diff --git a/engines/parallaction/gui_ns.cpp b/engines/parallaction/gui_ns.cpp index 74c068cc4c..23c2d73cc5 100644 --- a/engines/parallaction/gui_ns.cpp +++ b/engines/parallaction/gui_ns.cpp @@ -100,11 +100,24 @@ static uint16 _pcKeys[][PASSWORD_LEN] = { { 0, 2, 8, 5, 5, 1 } // donna }; +static const char *_charStartLocation[] = { + "test.dough", + "test.dino", + "test.donna" +}; + enum { NEW_GAME, LOAD_GAME }; +enum { + START_DEMO, + START_INTRO, + GAME_LOADED, + SELECT_CHARACTER +}; + void Parallaction_ns::guiStart() { _disk->selectArchive((getFeatures() & GF_LANG_MULT) ? "disk1" : "disk0"); @@ -116,18 +129,49 @@ void Parallaction_ns::guiStart() { _language = guiChooseLanguage(); _disk->setLanguage(_language); + int event; + if (getFeatures() & GF_DEMO) { + event = START_DEMO; + } else { + if (guiSelectGame() == NEW_GAME) { + event = guiNewGame(); + } else { + event = loadGame() ? GAME_LOADED : START_INTRO; + } + } + + switch (event) { + case START_DEMO: strcpy(_location._name, "fognedemo.dough"); + break; + + case START_INTRO: + strcpy(_location._name, "fogne.dough"); + break; + + case GAME_LOADED: + // nothing to do here return; - } - if (guiSelectGame() == NEW_GAME) { - guiNewGame(); + case SELECT_CHARACTER: + selectCharacterForNewLocation(); + break; + } return; } +void Parallaction_ns::selectCharacterForNewLocation() { + int character = guiSelectCharacter(); + if (character == -1) + error("invalid character selected from menu screen"); + + strcpy(_location._name, _charStartLocation[character]); +} + + void Parallaction_ns::guiSplash() { showSlide("intro"); @@ -140,7 +184,7 @@ void Parallaction_ns::guiSplash() { } -void Parallaction_ns::guiNewGame() { +int Parallaction_ns::guiNewGame() { const char **v14 = introMsg3; @@ -167,13 +211,10 @@ void Parallaction_ns::guiNewGame() { showCursor(true); if (_mouseButtons != kMouseRightUp) { - strcpy(_location._name, "fogne.dough"); - return; // show intro + return START_INTRO; } - guiSelectCharacter(); - - return; // start game + return SELECT_CHARACTER; } uint16 Parallaction_ns::guiChooseLanguage() { @@ -226,8 +267,8 @@ uint16 Parallaction_ns::guiChooseLanguage() { } } - g_system->delayMillis(30); _gfx->updateScreen(); + g_system->delayMillis(30); } while (true); @@ -266,23 +307,11 @@ uint16 Parallaction_ns::guiSelectGame() { } - g_system->delayMillis(30); _gfx->updateScreen(); + g_system->delayMillis(30); } - if (_si == 0) return NEW_GAME; // new game - - // load game - - // TODO: allow the user to change her mind in this screen, that is - // don't force her to start at the intro when she closes her load - // game window without picking a savegame. - // The 2 strcpy's below act as workaround to prevent crashes for - // time being. - strcpy(_location._name, "fogne.dough"); - loadGame(); - - return LOAD_GAME; // load game + return _si ? LOAD_GAME : NEW_GAME; } @@ -313,7 +342,7 @@ int Parallaction_ns::guiGetSelectedBlock(const Common::Point &p, Common::Rect &r // // character selection and protection // -void Parallaction_ns::guiSelectCharacter() { +int Parallaction_ns::guiSelectCharacter() { debugC(1, kDebugMenu, "Parallaction_ns::guiselectCharacter()"); Graphics::Surface v14; @@ -331,7 +360,7 @@ void Parallaction_ns::guiSelectCharacter() { uint16 (*keys)[PASSWORD_LEN] = (getPlatform() == Common::kPlatformAmiga && (getFeatures() & GF_LANG_MULT)) ? _amigaKeys : _pcKeys; uint16 points[3]; - bool matched = false; + int character = -1; uint16 _di = 0; while (true) { @@ -349,7 +378,6 @@ void Parallaction_ns::guiSelectCharacter() { _mouseButtons = kMouseNone; do { updateInput(); - g_system->delayMillis(30); _gfx->updateScreen(); } while (_mouseButtons != kMouseLeftUp); // waits for left click @@ -366,7 +394,7 @@ void Parallaction_ns::guiSelectCharacter() { } if (points[i] == PASSWORD_LEN) { - matched = true; + character = i; } } @@ -374,7 +402,7 @@ void Parallaction_ns::guiSelectCharacter() { } } - if (matched) { + if (character != -1) { break; } @@ -387,24 +415,12 @@ void Parallaction_ns::guiSelectCharacter() { _gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront); } - if (points[1] == PASSWORD_LEN) { - sprintf(_location._name, "test.%s", _dinoName); - } else - if (points[2] == PASSWORD_LEN) { - sprintf(_location._name, "test.%s", _donnaName); - } else - if (points[0] == PASSWORD_LEN) { - sprintf(_location._name, "test.%s", _doughName); - } - _gfx->setBlackPalette(); _gfx->updateScreen(); - _engineFlags |= kEngineChangeLocation; - v14.free(); - return; + return character; } diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index 49d3915455..5b56296fd6 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -369,8 +369,8 @@ public: int init(); - virtual void loadGame() = 0; - virtual void saveGame() = 0; + virtual bool loadGame() = 0; + virtual bool saveGame() = 0; uint16 updateInput(); @@ -661,8 +661,8 @@ public: const JobFn *_jobsFn; JobOpcode* createJobOpcode(uint functionId, Job *job); - void loadGame(); - void saveGame(); + bool loadGame(); + bool saveGame(); private: @@ -902,10 +902,12 @@ protected: DECLARE_UNQUALIFIED_INSTRUCTION_OPCODE(move); DECLARE_UNQUALIFIED_INSTRUCTION_OPCODE(endscript); + void selectCharacterForNewLocation(); + void guiStart(); - void guiSelectCharacter(); + int guiSelectCharacter(); void guiSplash(); - void guiNewGame(); + int guiNewGame(); uint16 guiChooseLanguage(); uint16 guiSelectGame(); int guiGetSelectedBlock(const Common::Point &p, Common::Rect& r); diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp index f4eac6c037..500ba79de7 100644 --- a/engines/parallaction/parallaction_ns.cpp +++ b/engines/parallaction/parallaction_ns.cpp @@ -259,19 +259,16 @@ void Parallaction_ns::callFunction(uint index, void* parm) { int Parallaction_ns::go() { + _globalTable = _disk->loadTable("global"); + guiStart(); LocationName locname; locname.bind(_location._name); - _char.setName(locname.character()); - strcpy(_location._name, locname.location()); - - _globalTable = _disk->loadTable("global"); - - _engineFlags &= ~kEngineChangeLocation; - changeCharacter(_char.getName()); + changeCharacter(locname.character()); + strcpy(_location._name, locname.location()); strcpy(_saveData1, _location._name); parseLocation(_location._name); @@ -454,5 +451,4 @@ JobOpcode* Parallaction_ns::createJobOpcode(uint functionId, Job *job) { return new OpcodeImpl2<Parallaction_ns>(this, _jobsFn[functionId], job); } - } // namespace Parallaction diff --git a/engines/parallaction/saveload.cpp b/engines/parallaction/saveload.cpp index cad2badfb3..28839c2f26 100644 --- a/engines/parallaction/saveload.cpp +++ b/engines/parallaction/saveload.cpp @@ -373,11 +373,11 @@ int Parallaction_ns::selectSaveFile(uint16 arg_0, const char* caption, const cha -void Parallaction_ns::loadGame() { +bool Parallaction_ns::loadGame() { int _di = selectSaveFile( 0, "Load file", "Load" ); if (_di == -1) { - return; + return false; } doLoadGame(_di); @@ -387,18 +387,19 @@ void Parallaction_ns::loadGame() { setArrowCursor(); - return; + return true; } -void Parallaction_ns::saveGame() { +bool Parallaction_ns::saveGame() { - if (!scumm_stricmp(_location._name, "caveau")) - return; + if (!scumm_stricmp(_location._name, "caveau")) { + return false; + } int slot = selectSaveFile( 1, "Save file", "Save" ); if (slot == -1) { - return; + return false; } doSaveGame(slot, _saveFileName.c_str()); @@ -406,9 +407,7 @@ void Parallaction_ns::saveGame() { GUI::TimedMessageDialog dialog("Saving game...", 1500); dialog.runModal(); - return; - - + return true; } |