aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/savefile.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2018-11-25 21:47:00 +0100
committerPeter Kohaut2018-11-25 22:22:25 +0100
commitcfb46da90cb045e029153848652bbd166a5c95b6 (patch)
tree468120f7e0c5eef52efcaafd9f4fec5ebd5981ef /engines/bladerunner/savefile.cpp
parent0d8834b5616aa8fc936c750ed92ef4423610d641 (diff)
downloadscummvm-rg350-cfb46da90cb045e029153848652bbd166a5c95b6.tar.gz
scummvm-rg350-cfb46da90cb045e029153848652bbd166a5c95b6.tar.bz2
scummvm-rg350-cfb46da90cb045e029153848652bbd166a5c95b6.zip
BLADERUNNER: Add in-game loading screen
It is also possible to start new game from it.
Diffstat (limited to 'engines/bladerunner/savefile.cpp')
-rw-r--r--engines/bladerunner/savefile.cpp49
1 files changed, 47 insertions, 2 deletions
diff --git a/engines/bladerunner/savefile.cpp b/engines/bladerunner/savefile.cpp
index 143d947646..fc0073c3ee 100644
--- a/engines/bladerunner/savefile.cpp
+++ b/engines/bladerunner/savefile.cpp
@@ -33,7 +33,52 @@
namespace BladeRunner {
-bool SaveFile::readHeader(Common::SeekableReadStream &in, SaveFileHeader &header, bool skipThumbnail) {
+SaveStateList SaveFileManager::list(const Common::String &target) {
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ Common::StringArray files = saveFileMan->listSavefiles(target + ".###");
+
+ SaveStateList saveList;
+ for (Common::StringArray::const_iterator fileName = files.begin(); fileName != files.end(); ++fileName) {
+ Common::InSaveFile *saveFile = saveFileMan->openForLoading(*fileName);
+ if (saveFile == nullptr || saveFile->err()) {
+ continue;
+ }
+
+ BladeRunner::SaveFileHeader header;
+ readHeader(*saveFile, header);
+
+ int slotNum = atoi(fileName->c_str() + fileName->size() - 3);
+ saveList.push_back(SaveStateDescriptor(slotNum, header._name));
+ }
+
+ Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());
+
+ return saveList;
+}
+
+SaveStateDescriptor SaveFileManager::queryMetaInfos(const Common::String &target, int slot) {
+ Common::String filename = Common::String::format("%s.%03d", target.c_str(), slot);
+ Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(filename);
+
+ if (saveFile == nullptr || saveFile->err()) {
+ return SaveStateDescriptor();
+ }
+
+ BladeRunner::SaveFileHeader header;
+ if (!BladeRunner::SaveFileManager::readHeader(*saveFile, header, false)) {
+ delete saveFile;
+ return SaveStateDescriptor();
+ }
+ delete saveFile;
+
+ SaveStateDescriptor desc(slot, header._name);
+ desc.setThumbnail(header._thumbnail);
+ desc.setSaveDate(header._year, header._month, header._day);
+ desc.setSaveTime(header._hour, header._minute);
+ return desc;
+}
+
+bool SaveFileManager::readHeader(Common::SeekableReadStream &in, SaveFileHeader &header, bool skipThumbnail) {
SaveFileReadStream s(in);
if (s.readUint32BE() != kTag) {
@@ -76,7 +121,7 @@ bool SaveFile::readHeader(Common::SeekableReadStream &in, SaveFileHeader &header
return true;
}
-bool SaveFile::writeHeader(Common::WriteStream &out, SaveFileHeader &header) {
+bool SaveFileManager::writeHeader(Common::WriteStream &out, SaveFileHeader &header) {
SaveFileWriteStream s(out);
s.writeUint32BE(kTag);