From 866cc57d64ecade7bfda89bfb2fce58cf2b51864 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 2 Feb 2020 16:19:29 -0800 Subject: [PATCH] ULTIMA: Move methods for showing save/restore dialogs into Engine class --- engines/engine.cpp | 38 ++++++++++++++ engines/engine.h | 10 ++++ .../ultima/nuvie/keybinding/key_actions.cpp | 2 +- .../ultima/nuvie/menus/game_menu_dialog.cpp | 4 +- engines/ultima/shared/engine/ultima.cpp | 30 ----------- engines/ultima/shared/engine/ultima.h | 10 ---- engines/ultima/ultima1/actions/quit.cpp | 2 +- .../ultima/ultima1/u1gfx/view_char_gen.cpp | 2 +- engines/ultima/ultima1/u1gfx/view_title.cpp | 2 +- engines/ultima/ultima8/ultima8.cpp | 50 +------------------ engines/ultima/ultima8/ultima8.h | 4 -- 11 files changed, 56 insertions(+), 98 deletions(-) diff --git a/engines/engine.cpp b/engines/engine.cpp index a289fb1c38a..519de1b584f 100644 --- a/engines/engine.cpp +++ b/engines/engine.cpp @@ -56,6 +56,7 @@ #include "gui/debugger.h" #include "gui/dialog.h" #include "gui/message.h" +#include "gui/saveload.h" #include "audio/mixer.h" @@ -686,6 +687,43 @@ bool Engine::canSaveGameStateCurrently() { return false; } +bool Engine::loadGameDialog() { + if (!canLoadGameStateCurrently()) + return false; + + GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false); + pauseEngine(true); + int slotNum = dialog->runModalWithCurrentTarget(); + pauseEngine(false); + delete dialog; + + if (slotNum != -1) + return loadGameState(slotNum).getCode() == Common::kNoError; + + return false; +} + +bool Engine::saveGameDialog() { + if (!canSaveGameStateCurrently()) + return false; + + GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true); + pauseEngine(true); + int slotNum = dialog->runModalWithCurrentTarget(); + pauseEngine(false); + + Common::String desc = dialog->getResultString(); + if (desc.empty()) + desc = dialog->createDefaultSaveDescription(slotNum); + + delete dialog; + + if (slotNum != -1) + return saveGameState(slotNum, desc).getCode() == Common::kNoError; + + return false; +} + void Engine::quitGame() { Common::Event event; diff --git a/engines/engine.h b/engines/engine.h index 8e9ce9f689f..2babc50ce5f 100644 --- a/engines/engine.h +++ b/engines/engine.h @@ -259,6 +259,16 @@ public: */ virtual bool canSaveGameStateCurrently(); + /** + * Shows the ScummVM save dialog, allowing users to save their game + */ + bool saveGameDialog(); + + /** + * Shows the ScummVM Restore dialog, allowing users to load a game + */ + bool loadGameDialog(); + protected: /** diff --git a/engines/ultima/nuvie/keybinding/key_actions.cpp b/engines/ultima/nuvie/keybinding/key_actions.cpp index 0314b525eb2..f029151ad5a 100644 --- a/engines/ultima/nuvie/keybinding/key_actions.cpp +++ b/engines/ultima/nuvie/keybinding/key_actions.cpp @@ -313,7 +313,7 @@ void ActionPartyMode(int const *params) { } void ActionSaveDialog(int const *params) { - g_engine->saveGame(); + g_engine->saveGameDialog(); } void ActionLoadLatestSave(int const *params) { diff --git a/engines/ultima/nuvie/menus/game_menu_dialog.cpp b/engines/ultima/nuvie/menus/game_menu_dialog.cpp index efccfb74910..701bf380db3 100644 --- a/engines/ultima/nuvie/menus/game_menu_dialog.cpp +++ b/engines/ultima/nuvie/menus/game_menu_dialog.cpp @@ -146,9 +146,9 @@ GUI_status GameMenuDialog::callback(uint16 msg, GUI_CallBack *caller, void *data if (caller == this) { close_dialog(); } else if (caller == save_button) { - g_engine->saveGame(); + g_engine->saveGameDialog(); } else if (caller == load_button) { - g_engine->loadGame(); + g_engine->loadGameDialog(); } else if (caller == video_button) { GUI_Widget *video_dialog; video_dialog = (GUI_Widget *) new VideoDialog(this); diff --git a/engines/ultima/shared/engine/ultima.cpp b/engines/ultima/shared/engine/ultima.cpp index decf3cc7783..ce6b55a3deb 100644 --- a/engines/ultima/shared/engine/ultima.cpp +++ b/engines/ultima/shared/engine/ultima.cpp @@ -28,7 +28,6 @@ #include "common/debug-channels.h" #include "common/file.h" #include "common/translation.h" -#include "gui/saveload.h" namespace Ultima { namespace Shared { @@ -107,35 +106,6 @@ Common::FSNode UltimaEngine::getGameDirectory() const { return Common::FSNode(ConfMan.get("path")); } -bool UltimaEngine::loadGame() { - if (!canLoadGameStateCurrently()) - return false; - - GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false); - int slotNum = dialog->runModalWithCurrentTarget(); - delete dialog; - - if (slotNum != -1) - return loadGameState(slotNum).getCode() == Common::kNoError; - - return false; -} - -bool UltimaEngine::saveGame() { - if (!canSaveGameStateCurrently()) - return false; - - GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true); - int slotNum = dialog->runModalWithCurrentTarget(); - Common::String saveName = dialog->getResultString(); - delete dialog; - - if (slotNum != -1) - return saveGameState(slotNum, saveName).getCode() == Common::kNoError; - - return false; -} - UltimaMetaEngine *UltimaEngine::getMetaEngine() const { return g_metaEngine; } diff --git a/engines/ultima/shared/engine/ultima.h b/engines/ultima/shared/engine/ultima.h index 403de9d8212..7ea06950eea 100644 --- a/engines/ultima/shared/engine/ultima.h +++ b/engines/ultima/shared/engine/ultima.h @@ -149,16 +149,6 @@ public: */ Common::FSNode getGameDirectory() const; - /** - * Shows the ScummVM save dialog, allowing users to save their game - */ - virtual bool saveGame(); - - /** - * Shows the ScummVM Restore dialog, allowing users to restore a game - */ - virtual bool loadGame(); - /** * Indicates whether a game state can be loaded. * @param isAutosave Flags whether it's an autosave check diff --git a/engines/ultima/ultima1/actions/quit.cpp b/engines/ultima/ultima1/actions/quit.cpp index 539bb619020..d67fe6f8b65 100644 --- a/engines/ultima/ultima1/actions/quit.cpp +++ b/engines/ultima/ultima1/actions/quit.cpp @@ -37,7 +37,7 @@ END_MESSAGE_MAP() bool Quit::QuitMsg(CQuitMsg &msg) { Ultima1Game *game = static_cast(getGame()); addInfoMsg(game->_res->ACTION_NAMES[16]); - g_vm->saveGame(); + g_vm->saveGameDialog(); return true; } diff --git a/engines/ultima/ultima1/u1gfx/view_char_gen.cpp b/engines/ultima/ultima1/u1gfx/view_char_gen.cpp index 50edaf203e7..8d10e07b646 100644 --- a/engines/ultima/ultima1/u1gfx/view_char_gen.cpp +++ b/engines/ultima/ultima1/u1gfx/view_char_gen.cpp @@ -398,7 +398,7 @@ bool ViewCharacterGeneration::save() { _character->_armour[1]->_quantity = 1; // Leather armour _character->_equippedSpell = 0; - return g_vm->saveGame(); + return g_vm->saveGameDialog(); } } // End of namespace U1Gfx diff --git a/engines/ultima/ultima1/u1gfx/view_title.cpp b/engines/ultima/ultima1/u1gfx/view_title.cpp index a662e18a852..8666d6d6487 100644 --- a/engines/ultima/ultima1/u1gfx/view_title.cpp +++ b/engines/ultima/ultima1/u1gfx/view_title.cpp @@ -304,7 +304,7 @@ bool ViewTitle::KeypressMsg(CKeypressMsg &msg) { if (msg._keyState.keycode == Common::KEYCODE_a) { setView("CharGen"); } else { - if (!g_vm->loadGame()) + if (!g_vm->loadGameDialog()) textCursor->setVisible(true); } } diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp index 6eb6fda5398..85be648c615 100644 --- a/engines/ultima/ultima8/ultima8.cpp +++ b/engines/ultima/ultima8/ultima8.cpp @@ -1291,33 +1291,6 @@ void Ultima8Engine::writeSaveInfo(ODataSource *ods) { game->writeSaveInfo(ods); } -bool Ultima8Engine::saveGame() { - if (!canSaveGameStateCurrently(false)) - return false; - - GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true); - bool result = false; - - pauseEngine(true); - int slot = dialog->runModalWithCurrentTarget(); - pauseEngine(false); - - if (slot >= 0) { - Common::String desc = dialog->getResultString(); - - if (desc.empty()) { - // create our own description for the saved game, the user didn't enter it - desc = dialog->createDefaultSaveDescription(slot); - } - - // Save the game - result = saveGameState(slot, desc, false).getCode() == Common::kNoError; - } - - delete dialog; - return result; -} - bool Ultima8Engine::canSaveGameStateCurrently(bool isAutosave) { if (desktopGump->FindGump()) // Can't save when a modal gump is open @@ -1563,25 +1536,6 @@ void Ultima8Engine::syncSoundSettings() { midiPlayer->setVolume(_mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType)); } -bool Ultima8Engine::loadGame() { - if (!canLoadGameStateCurrently()) - return false; - - GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false); - bool result = false; - - pauseEngine(true); - int slot = dialog->runModalWithCurrentTarget(); - pauseEngine(false); - - if (slot >= 0) { - result = loadGameState(slot).getCode() == Common::kNoError; - } - - delete dialog; - return result; -} - Common::Error Ultima8Engine::loadGameState(int slot) { return loadGame(Std::string::format("@save/%d", slot)) ? Common::kNoError : Common::kReadingFailed; @@ -1849,7 +1803,7 @@ void Ultima8Engine::ConCmd_saveGame(const Console::ArgvType &argv) { // Save a game with the given name into the quicksave slot Ultima8Engine::get_instance()->saveGame("@save/1", argv[1]); } else { - Ultima8Engine::get_instance()->saveGame(); + Ultima8Engine::get_instance()->saveGameDialog(); } } @@ -1859,7 +1813,7 @@ void Ultima8Engine::ConCmd_loadGame(const Console::ArgvType &argv) { // it just needs to be present to differentiate from showing the GUI load dialog Ultima8Engine::get_instance()->loadGame("@save/1"); } else { - Ultima8Engine::get_instance()->loadGame(); + Ultima8Engine::get_instance()->loadGameDialog(); } } diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h index 350ebe0cf54..2a2e65f0f22 100644 --- a/engines/ultima/ultima8/ultima8.h +++ b/engines/ultima/ultima8/ultima8.h @@ -337,16 +337,12 @@ public: */ virtual Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) override; - bool saveGame() override; - //! save a game //! \param filename the file to save to //! \return true if succesful bool saveGame(Std::string filename, Std::string desc, bool ignore_modals = false); - bool loadGame() override; - //! load a game //! \param filename the savegame to load //! \return true if succesful.