mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-23 11:04:44 +00:00
ULTIMA: Move methods for showing save/restore dialogs into Engine class
This commit is contained in:
parent
31f4bc74ab
commit
866cc57d64
@ -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;
|
||||
|
||||
|
@ -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:
|
||||
|
||||
/**
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -37,7 +37,7 @@ END_MESSAGE_MAP()
|
||||
bool Quit::QuitMsg(CQuitMsg &msg) {
|
||||
Ultima1Game *game = static_cast<Ultima1Game *>(getGame());
|
||||
addInfoMsg(game->_res->ACTION_NAMES[16]);
|
||||
g_vm->saveGame();
|
||||
g_vm->saveGameDialog();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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<ModalGump>())
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user