/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifndef ENGINES_SAVESTATE_H #define ENGINES_SAVESTATE_H #include "common/array.h" #include "common/str.h" #include "common/ustr.h" #include "common/ptr.h" class MetaEngine; namespace Graphics { struct Surface; } /** * @defgroup engines_savestate Save states * @ingroup engines * * @brief API for managing save states. * * @{ */ /** * Object describing a save state. * * This at least includes the save slot number and a human readable * description of the save state. * * Further possibilites are a thumbnail, play time, creation date, * creation time, delete protected, write protection. * * Saves are writable and deletable by default. */ class SaveStateDescriptor { private: enum SaveType { kSaveTypeUndetermined, kSaveTypeRegular, kSaveTypeAutosave }; void initSaveSlot(const MetaEngine *metaEngine); public: SaveStateDescriptor(); SaveStateDescriptor(const MetaEngine *metaEngine, int slot, const Common::U32String &d); SaveStateDescriptor(const MetaEngine *metaEngine, int slot, const Common::String &d); /** * @param slot The saveslot id, as it would be passed to the "-x" command line switch. */ void setSaveSlot(int slot) { _slot = slot; } /** * @return The saveslot id, as it would be passed to the "-x" command line switch. */ int getSaveSlot() const { return _slot; } /** * @param desc A human readable description of the save state. */ void setDescription(const Common::String &desc) { _description = desc.decode(); } void setDescription(const Common::U32String &desc) { _description = desc; } /** * @return A human readable description of the save state. */ const Common::U32String &getDescription() const { return _description; } /** Optional entries only included when querying via MetaEngine::querySaveMetaInfo */ /** * Defines whether the save state is allowed to be deleted. */ void setDeletableFlag(bool state) { _isDeletable = state; } /** * Queries whether the save state is allowed to be deleted. */ bool getDeletableFlag() const { return _isDeletable; } /** * Defines whether the save state is write protected. */ void setWriteProtectedFlag(bool state) { _isWriteProtected = state; } /** * Queries whether the save state is write protected. */ bool getWriteProtectedFlag() const { return _isWriteProtected; } /** * Defines whether the save state is "locked" because is being synced. */ void setLocked(bool state) { _isLocked = state; //just in case: if (state) { setDeletableFlag(false); setWriteProtectedFlag(true); } } /** * Queries whether the save state is "locked" because is being synced. */ bool getLocked() const { return _isLocked; } /** * Return a thumbnail graphics surface representing the savestate visually. * This is usually a scaled down version of the game graphics. The size * should be either 160x100 or 160x120 pixels, depending on the aspect * ratio of the game. If another ratio is required, contact the core team. */ const Graphics::Surface *getThumbnail() const { return _thumbnail.get(); } /** * Set a thumbnail graphics surface representing the savestate visually. * Ownership of the surface is transferred to the SaveStateDescriptor. * Hence the caller must not delete the surface. */ void setThumbnail(Graphics::Surface *t); void setThumbnail(Common::SharedPtr t) { _thumbnail = t; } /** * Sets the date the save state was created. * * @param year Year of creation. * @param month Month of creation. * @param day Day of creation. */ void setSaveDate(int year, int month, int day); /** * Queries a human readable description of the date the save state was created. * * This will return an empty string in case the value is not set. */ const Common::String &getSaveDate() const { return _saveDate; } /** * Sets the time the save state was created. * * @param hour Hour of creation. * @param min Minute of creation. */ void setSaveTime(int hour, int min); /** * Queries a human readable description of the time the save state was created. * * This will return an empty string in case the value is not set. */ const Common::String &getSaveTime() const { return _saveTime; } /** * Sets the time the game was played before the save state was created. * * @param hours How many hours the user played the game so far. * @param minutes How many minutes the user played the game so far. */ void setPlayTime(int hours, int minutes); /** * Sets the time the game was played before the save state was created. * * @param msecs How many milliseconds the user played the game so far. */ void setPlayTime(uint32 msecs); /** * Queries a human readable description of the time the game was played * before the save state was created. * * This will return an empty string in case the value is not set. */ const Common::String &getPlayTime() const { return _playTime; } /** * Returns the time the game was played before the save state was created * in milliseconds. * * It defaults to 0. */ 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; /** * Returns true if the save has an autosave name */ bool hasAutosaveName() const; /** * Returns true if this entry is valid */ bool isValid() const; private: /** * The saveslot id, as it would be passed to the "-x" command line switch. */ int _slot; /** * A human readable description of the save state. */ Common::U32String _description; /** * Whether the save state can be deleted. */ bool _isDeletable; /** * Whether the save state is write protected. */ bool _isWriteProtected; /** * Whether the save state is "locked" because is being synced. */ bool _isLocked; /** * Human readable description of the date the save state was created. */ Common::String _saveDate; /** * Human readable description of the time the save state was created. */ Common::String _saveTime; /** * Human readable description of the time the game was played till the * save state was created. */ Common::String _playTime; /** * The time the game was played before the save state was created * in milliseconds. */ uint32 _playTimeMSecs; /** * The thumbnail of the save state. */ Common::SharedPtr _thumbnail; /** * Save file type */ SaveType _saveType; }; /** List of savestates. */ typedef Common::Array SaveStateList; /** * Comparator object to compare SaveStateDescriptor's based on slot. */ struct SaveStateDescriptorSlotComparator { bool operator()(const SaveStateDescriptor &x, const SaveStateDescriptor &y) const { return x.getSaveSlot() < y.getSaveSlot(); } }; /** @} */ #endif