Skip to content

Commit

Permalink
ENGINES: Abstract autosave check into SaveStateDescriptor
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Feb 16, 2020
1 parent 233614a commit 0b81eaa
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 5 deletions.
5 changes: 2 additions & 3 deletions engines/engine.cpp
Expand Up @@ -496,16 +496,15 @@ void Engine::handleAutoSave() {
void Engine::saveAutosaveIfEnabled() {
if (_autosaveInterval != 0) {
bool saveFlag = canSaveAutosaveCurrently();
Common::String saveName = _("Autosave");

if (saveFlag) {
// First check for an existing savegame in the slot, and if present, if it's an autosave
SaveStateDescriptor desc = getMetaEngine().querySaveMetaInfos(
_targetName.c_str(), getAutosaveSlot());
saveFlag = desc.getSaveSlot() == -1 || desc.getDescription() == saveName;
saveFlag = desc.getSaveSlot() == -1 || desc.isAutosave();
}

if (saveFlag && saveGameState(getAutosaveSlot(), saveName, true).getCode() != Common::kNoError) {
if (saveFlag && saveGameState(getAutosaveSlot(), _("Autosave"), true).getCode() != Common::kNoError) {
// Couldn't autosave at the designated time
g_system->displayMessageOnOSD(_("Error occurred making autosave"));
saveFlag = false;
Expand Down
19 changes: 17 additions & 2 deletions engines/savestate.cpp
Expand Up @@ -23,16 +23,19 @@
#include "engines/savestate.h"
#include "graphics/surface.h"
#include "common/textconsole.h"
#include "common/translation.h"

SaveStateDescriptor::SaveStateDescriptor()
// FIXME: default to 0 (first slot) or to -1 (invalid slot) ?
: _slot(-1), _description(), _isDeletable(true), _isWriteProtected(false),
_isLocked(false), _saveDate(), _saveTime(), _playTime(), _playTimeMSecs(0), _thumbnail() {
_isLocked(false), _saveDate(), _saveTime(), _playTime(), _playTimeMSecs(0),
_thumbnail(), _saveType(kSaveTypeUndetermined) {
}

SaveStateDescriptor::SaveStateDescriptor(int s, const Common::String &d)
: _slot(s), _description(d), _isDeletable(true), _isWriteProtected(false),
_isLocked(false), _saveDate(), _saveTime(), _playTime(), _playTimeMSecs(0), _thumbnail() {
_isLocked(false), _saveDate(), _saveTime(), _playTime(), _playTimeMSecs(0),
_thumbnail(), _saveType(kSaveTypeUndetermined) {
}

void SaveStateDescriptor::setThumbnail(Graphics::Surface *t) {
Expand Down Expand Up @@ -60,3 +63,15 @@ void SaveStateDescriptor::setPlayTime(uint32 msecs) {
uint minutes = msecs / 60000;
setPlayTime(minutes / 60, minutes % 60);
}

void SaveStateDescriptor::setAutosave(bool autosave) {
_saveType = autosave ? kSaveTypeAutosave : kSaveTypeRegular;
}

bool SaveStateDescriptor::isAutosave() const {
if (_saveType != kSaveTypeUndetermined) {
return _saveType == kSaveTypeAutosave;
} else {
return _description == _("Autosave");
}
}
20 changes: 20 additions & 0 deletions engines/savestate.h
Expand Up @@ -43,6 +43,12 @@ struct Surface;
* Saves are writable and deletable by default.
*/
class SaveStateDescriptor {
private:
enum SaveType {
kSaveTypeUndetermined,
kSaveTypeRegular,
kSaveTypeAutosave
};
public:
SaveStateDescriptor();
SaveStateDescriptor(int s, const Common::String &d);
Expand Down Expand Up @@ -185,6 +191,15 @@ class SaveStateDescriptor {
*/
uint32 getPlayTimeMSecs() const { return _playTimeMSecs; }

/**
* Sets whether the save is an autosave
*/
void setAutosave(bool autosave);

/**
* Returns true whether the save is an autosave
*/
bool isAutosave() const;
private:
/**
* The saveslot id, as it would be passed to the "-x" command line switch.
Expand Down Expand Up @@ -237,6 +252,11 @@ class SaveStateDescriptor {
* The thumbnail of the save state.
*/
Common::SharedPtr<Graphics::Surface> _thumbnail;

/**
* Save file type
*/
SaveType _saveType;
};

/** List of savestates. */
Expand Down

0 comments on commit 0b81eaa

Please sign in to comment.