From e9cd4ce276ed5f68956348a76c10faf7cf62a456 Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Tue, 25 Nov 2025 14:39:31 +0100 Subject: [PATCH] :recycle: reworked and debugged the SaveSystem. Removed unnecessary scene reference. --- .../CSharp/Common/Farming/FieldBehaviour2D.cs | 5 ++- .../Common/Inventory/InventoryInstance.cs | 8 ++--- scripts/CSharp/Common/Savegame/SaveData.cs | 3 +- .../CSharp/Common/Savegame/SavegameService.cs | 34 +++++++++++-------- scripts/CSharp/Common/Temp/MVPDuck.cs | 9 ++--- 5 files changed, 27 insertions(+), 32 deletions(-) diff --git a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs index ad422da..78e575a 100644 --- a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs +++ b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs @@ -202,15 +202,14 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable ); } - SavegameService.AppendDataToSave(_sceneKeyProvider.Payload.AsString(), SaveId + _fieldIndex.Payload.AsString(), payloadData); + SavegameService.AppendDataToSave(SaveId + _fieldIndex.Payload.AsString(), payloadData); } public void LoadFromSaveData() { - var sceneName = _sceneKeyProvider.Payload.AsString(); var id = SaveId + _fieldIndex.Payload.AsString(); - Dictionary save = SavegameService.GetSaveData(sceneName, id); + Dictionary save = SavegameService.GetSaveData(id); if (save.Count > 0) { diff --git a/scripts/CSharp/Common/Inventory/InventoryInstance.cs b/scripts/CSharp/Common/Inventory/InventoryInstance.cs index 8d235da..f6c0cea 100644 --- a/scripts/CSharp/Common/Inventory/InventoryInstance.cs +++ b/scripts/CSharp/Common/Inventory/InventoryInstance.cs @@ -17,8 +17,7 @@ public partial class InventoryInstance : Node, ISaveable [Signal] public delegate void InventoryContentsChangedEventHandler(); - - private const string SCENE_NAME = "inventory"; + private const string ID = "instace"; /// @@ -192,15 +191,14 @@ public partial class InventoryInstance : Node, ISaveable } } - SavegameService.AppendDataToSave(SCENE_NAME, ID, payloadData); + SavegameService.AppendDataToSave(ID, payloadData); } public void LoadFromSaveData() { - var sceneName = SCENE_NAME; var id = ID; - Godot.Collections.Dictionary save = SavegameService.GetSaveData(sceneName, id); + Godot.Collections.Dictionary save = SavegameService.GetSaveData(id); if (save.Count > 0) { diff --git a/scripts/CSharp/Common/Savegame/SaveData.cs b/scripts/CSharp/Common/Savegame/SaveData.cs index a26c1d9..412dc95 100644 --- a/scripts/CSharp/Common/Savegame/SaveData.cs +++ b/scripts/CSharp/Common/Savegame/SaveData.cs @@ -18,12 +18,11 @@ public class SaveData return VERSION == version; } - public string SceneName; public string Id; public string JsonPayload; public string ToString() { - return SceneName + " " + Id + " " + JsonPayload; + return Id + " " + JsonPayload; } } \ No newline at end of file diff --git a/scripts/CSharp/Common/Savegame/SavegameService.cs b/scripts/CSharp/Common/Savegame/SavegameService.cs index c8504e5..36a7e65 100644 --- a/scripts/CSharp/Common/Savegame/SavegameService.cs +++ b/scripts/CSharp/Common/Savegame/SavegameService.cs @@ -20,11 +20,9 @@ public static class SavegameService public static bool _loaded = false; - public static void AppendDataToSave(string scenename, string id, Dictionary payload) + public static void AppendDataToSave( string id, Dictionary payload) { var saveData = new SaveData(); - - saveData.SceneName = scenename; saveData.Id = id; saveData.JsonPayload = Json.Stringify(payload, indent: "\t"); AppendSave(saveData); @@ -36,15 +34,13 @@ public static class SavegameService /// private static void AppendSave(SaveData saveData) { - string key = string.Concat(saveData.SceneName, "_", saveData.Id); - - if (SaveDatas.TryGetValue(key, out var value)) + if (SaveDatas.TryGetValue(saveData.Id, out var value)) { - SaveDatas[key] = saveData.JsonPayload; + SaveDatas[saveData.Id] = saveData.JsonPayload; } else { - SaveDatas.Add(key, saveData.JsonPayload); + SaveDatas.Add(saveData.Id, saveData.JsonPayload); } } @@ -56,11 +52,10 @@ public static class SavegameService /// /// /// - public static Dictionary GetSaveData(string sceneName, string id) + public static Dictionary GetSaveData(string id) { Dictionary saveData = new(); - string key = string.Concat(sceneName, "_", id); string saveDataString = ""; if (!_loaded) @@ -69,9 +64,9 @@ public static class SavegameService return saveData; } - if (SaveDatas.ContainsKey(key)) + if (SaveDatas.ContainsKey(id)) { - saveDataString = SaveDatas[key]; + saveDataString = SaveDatas[id]; saveData = Json.ParseString(saveDataString).AsGodotDictionary(); } @@ -88,8 +83,10 @@ public static class SavegameService GD.Print(SavePath); // create cloud directory - System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(SavePath) ?? ""); + CreateSaveDirectory(); + GD.Print("Save."); + try { using var file = FileAccess.Open(SavePath, FileAccess.ModeFlags.Write); @@ -101,21 +98,28 @@ public static class SavegameService } } + private static void CreateSaveDirectory() + { + System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(SavePath) ?? ""); + } + /// /// Loads the current savegame file from disk and parses it into the SaveData dictionary. /// public static void Load() { + GD.Print("Load."); try { if (!System.IO.File.Exists(SavePath)) { SaveDatas = new(); - return; + CreateSaveDirectory(); } string saveDataJson = FileAccess.GetFileAsString(SavePath); - SaveDatas = Json.ParseString(saveDataJson).AsGodotDictionary(); + if(!string.IsNullOrEmpty(saveDataJson)) + SaveDatas = Json.ParseString(saveDataJson).AsGodotDictionary(); } catch(Exception e) diff --git a/scripts/CSharp/Common/Temp/MVPDuck.cs b/scripts/CSharp/Common/Temp/MVPDuck.cs index eb34f46..4ef5fc7 100644 --- a/scripts/CSharp/Common/Temp/MVPDuck.cs +++ b/scripts/CSharp/Common/Temp/MVPDuck.cs @@ -11,10 +11,6 @@ namespace Babushka.scripts.CSharp.Common.Temp; /// public partial class MVPDuck : Node2D, ISaveable { - [ExportGroup("Persistence")] - // A container for the current scene. Used to automatically add the current scene context to the save ID. - [Export] public VariableResource _sceneKeyProvider; - [ExportGroup("Animation")] [Export] private Node2D _penTarget; [Export] private int _transferDelayMs; @@ -70,7 +66,7 @@ public partial class MVPDuck : Node2D, ISaveable string id = GetMeta("SaveID").AsString(); GD.Print($"Updating Save ID for object {Name}: {id}"); - SavegameService.AppendDataToSave(_sceneKeyProvider.Payload.AsString(), id, payloadData); + SavegameService.AppendDataToSave( id, payloadData); } /// @@ -78,11 +74,10 @@ public partial class MVPDuck : Node2D, ISaveable /// public void LoadFromSaveData() { - var sceneName = _sceneKeyProvider.Payload.AsString(); string id = GetMeta("SaveID").AsString(); GD.Print($"Loading Save ID for object {Name}: " + id); - Dictionary save = SavegameService.GetSaveData(sceneName, id); + Dictionary save = SavegameService.GetSaveData(id); if (save.Count > 0) { float xPos = 0;