diff --git a/scripts/CSharp/Common/Savegame/SaveData.cs b/scripts/CSharp/Common/Savegame/SaveData.cs index 1a7e3a8..a26c1d9 100644 --- a/scripts/CSharp/Common/Savegame/SaveData.cs +++ b/scripts/CSharp/Common/Savegame/SaveData.cs @@ -9,6 +9,15 @@ namespace Babushka.scripts.CSharp.Common.Savegame; [Serializable] public class SaveData { + // for future use in case the structure changes. + public const int VERSION = 1; + public int version { get; set; } = VERSION; + + public bool IsVersionValid() + { + return VERSION == version; + } + public string SceneName; public string Id; public string JsonPayload; diff --git a/scripts/CSharp/Common/Savegame/SaveGameManager.cs b/scripts/CSharp/Common/Savegame/SaveGameManager.cs index 9d53244..3d20162 100644 --- a/scripts/CSharp/Common/Savegame/SaveGameManager.cs +++ b/scripts/CSharp/Common/Savegame/SaveGameManager.cs @@ -7,12 +7,15 @@ namespace Babushka.scripts.CSharp.Common.Savegame; /// public partial class SaveGameManager : Node { + public static string USER_DATA_FILE_PATH = "user://save_data/userData.json"; + public static SaveGameManager? Instance { get; private set; } = null!; public override void _EnterTree() { Instance = this; - + USER_DATA_FILE_PATH = ProjectSettings.GlobalizePath(USER_DATA_FILE_PATH); + SavegameService.SavePath = USER_DATA_FILE_PATH; SavegameService.Load(); } diff --git a/scripts/CSharp/Common/Savegame/SavegameService.cs b/scripts/CSharp/Common/Savegame/SavegameService.cs index 546e1f6..b733da7 100644 --- a/scripts/CSharp/Common/Savegame/SavegameService.cs +++ b/scripts/CSharp/Common/Savegame/SavegameService.cs @@ -9,10 +9,11 @@ namespace Babushka.scripts.CSharp.Common.Savegame; /// Handles the saving and loading of game states. /// Holds the central SaveData object that serves as a temporary SaveFile. /// Automatically writes to disk on every scene change. +/// Uses the Godot Json Serializer, which may implicitly convert integers to floats, so be careful when extending! /// public static class SavegameService { - public static readonly string SavePath = "user://babushka_savegame.json"; + public static string SavePath = ""; public static Dictionary SaveDatas = new (); @@ -72,8 +73,20 @@ public static class SavegameService public static void Save() { string json = Json.Stringify(SaveDatas, indent: "\t"); - using var file = FileAccess.Open(SavePath, FileAccess.ModeFlags.Write); - file.StoreString(json); + + GD.Print(SavePath); + // create cloud directory + System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(SavePath) ?? ""); + + try + { + using var file = FileAccess.Open(SavePath, FileAccess.ModeFlags.Write); + file.StoreString(json); + } + catch (Exception e) + { + GD.Print(e.Message); + } } /// @@ -83,8 +96,15 @@ public static class SavegameService { try { + if (!System.IO.File.Exists(SavePath)) + { + SaveDatas = new(); + return; + } + string saveDataJson = FileAccess.GetFileAsString(SavePath); SaveDatas = Json.ParseString(saveDataJson).AsGodotDictionary(); + } catch(Exception e) {