feature/save_and_loaaaaaad #32
@@ -1,12 +1,20 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Babushka.scripts.CSharp.Common.Savegame;
|
||||||
using Babushka.scripts.CSharp.Common.Services;
|
using Babushka.scripts.CSharp.Common.Services;
|
||||||
|
using Babushka.scripts.CSharp.Low_Code.Variables;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
|
||||||
namespace Babushka.scripts.CSharp.Common.CharacterControls;
|
namespace Babushka.scripts.CSharp.Common.CharacterControls;
|
||||||
|
|
||||||
public partial class InteractionArea2D : Node2D
|
public partial class InteractionArea2D : Node2D, ISaveable
|
||||||
{
|
{
|
||||||
|
[ExportGroup("Persistence")]
|
||||||
|
[Export] public string SaveId = "";
|
||||||
|
[Export] private VariableNode _sceneID;
|
||||||
|
[Export] public VariableResource _sceneKeyProvider;
|
||||||
|
|
||||||
|
[ExportGroup("Settings")]
|
||||||
[Export] private Area2D _area;
|
[Export] private Area2D _area;
|
||||||
[Export] private Label _label;
|
[Export] private Label _label;
|
||||||
[Export] private bool _active = true;
|
[Export] private bool _active = true;
|
||||||
|
kziolkowski marked this conversation as resolved
|
|||||||
@@ -17,6 +25,7 @@ public partial class InteractionArea2D : Node2D
|
|||||||
[Export] private int _id = -1; // TODO: remove
|
[Export] private int _id = -1; // TODO: remove
|
||||||
|
|
||||||
private Material[] _backupMaterials;
|
private Material[] _backupMaterials;
|
||||||
|
private int _interactionCounter;
|
||||||
|
|
||||||
[Signal] public delegate void InteractedToolEventHandler(int id); // TODO: remove
|
[Signal] public delegate void InteractedToolEventHandler(int id); // TODO: remove
|
||||||
|
|
||||||
@@ -106,6 +115,7 @@ public partial class InteractionArea2D : Node2D
|
|||||||
|
|
||||||
EmitSignal(SignalName.InteractedTool, _id);
|
EmitSignal(SignalName.InteractedTool, _id);
|
||||||
EmitSignal(SignalName.Interacted);
|
EmitSignal(SignalName.Interacted);
|
||||||
|
_interactionCounter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,4 +130,26 @@ public partial class InteractionArea2D : Node2D
|
|||||||
_active = !_active;
|
_active = !_active;
|
||||||
_label.Hide();
|
_label.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region SAVE AND LOAD
|
||||||
|
|
||||||
|
public void UpdateSaveData()
|
||||||
|
{
|
||||||
|
var payloadData = new Dictionary<string, Variant>
|
||||||
|
{
|
||||||
|
{ "interaction counter", _interactionCounter }
|
||||||
|
};
|
||||||
|
|
||||||
|
SavegameService.AppendDataToSave(_sceneKeyProvider.Payload.AsString(), SaveId + _sceneID.Payload.AsString(), payloadData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadFromSaveData()
|
||||||
|
{
|
||||||
|
var sceneName = _sceneKeyProvider.Payload.AsString();
|
||||||
|
var id = SaveId + _sceneID.Payload.AsString();
|
||||||
|
|
||||||
|
Dictionary<string, Variant> save = SavegameService.GetSaveData(sceneName, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -185,10 +185,6 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
|||||||
|
|
||||||
public void UpdateSaveData()
|
public void UpdateSaveData()
|
||||||
{
|
{
|
||||||
var saveData = new SaveData();
|
|
||||||
|
|
||||||
saveData.SceneName = _sceneKeyProvider.Payload.AsString();
|
|
||||||
saveData.Id = SaveId + _fieldIndex.Payload.AsString();
|
|
||||||
var payloadData = new Dictionary<string, Variant>
|
var payloadData = new Dictionary<string, Variant>
|
||||||
{
|
{
|
||||||
{ "field_state", (int)FieldState }
|
{ "field_state", (int)FieldState }
|
||||||
@@ -206,20 +202,15 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
saveData.JsonPayload = Json.Stringify(payloadData, indent: "\t");
|
SavegameService.AppendDataToSave(_sceneKeyProvider.Payload.AsString(), SaveId + _fieldIndex.Payload.AsString(), payloadData);
|
||||||
|
|
||||||
SavegameService.AppendSave(saveData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadFromSaveData()
|
public void LoadFromSaveData()
|
||||||
{
|
{
|
||||||
var sceneName = _sceneKeyProvider.Payload.AsString();
|
var sceneName = _sceneKeyProvider.Payload.AsString();
|
||||||
var id = SaveId + _fieldIndex.Payload.AsString();
|
var id = SaveId + _fieldIndex.Payload.AsString();
|
||||||
string jsonPayload = SavegameService.GetSaveData(sceneName, id);
|
|
||||||
if (string.IsNullOrEmpty(jsonPayload))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Dictionary<string, Variant> save = Json.ParseString(jsonPayload).AsGodotDictionary<string, Variant>();
|
Dictionary<string, Variant> save = SavegameService.GetSaveData(sceneName, id);
|
||||||
|
|
||||||
if (save.Count > 0)
|
if (save.Count > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -178,10 +178,6 @@ public partial class InventoryInstance : Node, ISaveable
|
|||||||
|
|
||||||
public void UpdateSaveData()
|
public void UpdateSaveData()
|
||||||
{
|
{
|
||||||
var saveData = new SaveData();
|
|
||||||
|
|
||||||
saveData.SceneName = SCENE_NAME;
|
|
||||||
saveData.Id = ID;
|
|
||||||
var payloadData = new Godot.Collections.Dictionary<string, Variant>();
|
var payloadData = new Godot.Collections.Dictionary<string, Variant>();
|
||||||
|
|
||||||
for (int i = 0; i < _slots.Count; i++)
|
for (int i = 0; i < _slots.Count; i++)
|
||||||
@@ -196,20 +192,15 @@ public partial class InventoryInstance : Node, ISaveable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
saveData.JsonPayload = Json.Stringify(payloadData, indent: "\t");
|
SavegameService.AppendDataToSave(SCENE_NAME, ID, payloadData);
|
||||||
|
|
||||||
SavegameService.AppendSave(saveData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadFromSaveData()
|
public void LoadFromSaveData()
|
||||||
{
|
{
|
||||||
var sceneName = SCENE_NAME;
|
var sceneName = SCENE_NAME;
|
||||||
var id = ID;
|
var id = ID;
|
||||||
string jsonPayload = SavegameService.GetSaveData(sceneName, id);
|
|
||||||
if (string.IsNullOrEmpty(jsonPayload))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Godot.Collections.Dictionary<string, Variant> save = Json.ParseString(jsonPayload).AsGodotDictionary<string, Variant>();
|
Godot.Collections.Dictionary<string, Variant> save = SavegameService.GetSaveData(sceneName, id);
|
||||||
|
|
||||||
if (save.Count > 0)
|
if (save.Count > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bqapxuprxuj20
|
||||||
@@ -18,13 +18,23 @@ public static class SavegameService
|
|||||||
public static Dictionary<string, string> SaveDatas = new ();
|
public static Dictionary<string, string> SaveDatas = new ();
|
||||||
|
|
||||||
public static bool _loaded = false;
|
public static bool _loaded = false;
|
||||||
|
|
||||||
|
|
||||||
|
public static void AppendDataToSave(string scenename, string id, Dictionary<string, Variant> payload)
|
||||||
|
{
|
||||||
|
var saveData = new SaveData();
|
||||||
|
|
||||||
|
saveData.SceneName = scenename;
|
||||||
|
saveData.Id = id;
|
||||||
|
saveData.JsonPayload = Json.Stringify(payload, indent: "\t");
|
||||||
|
AppendSave(saveData);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds or overwrites an entry in the SaveData dictionary.
|
/// Adds or overwrites an entry in the SaveData dictionary.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="saveData"></param>
|
/// <param name="saveData"></param>
|
||||||
public static void AppendSave(SaveData saveData)
|
private static void AppendSave(SaveData saveData)
|
||||||
{
|
{
|
||||||
string key = string.Concat(saveData.SceneName, "_", saveData.Id);
|
string key = string.Concat(saveData.SceneName, "_", saveData.Id);
|
||||||
|
|
||||||
@@ -46,21 +56,23 @@ public static class SavegameService
|
|||||||
/// <param name="sceneName"></param>
|
/// <param name="sceneName"></param>
|
||||||
/// <param name="id"></param>
|
/// <param name="id"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static string GetSaveData(string sceneName, string id)
|
public static Dictionary<string, Variant> GetSaveData(string sceneName, string id)
|
||||||
{
|
{
|
||||||
string saveData = "";
|
Dictionary<string, Variant> saveData = new();
|
||||||
|
|
||||||
string key = string.Concat(sceneName, "_", id);
|
string key = string.Concat(sceneName, "_", id);
|
||||||
|
string saveDataString = "";
|
||||||
|
|
||||||
if (!_loaded)
|
if (!_loaded)
|
||||||
{
|
{
|
||||||
GD.Print("SavegameService: SaveFile not loaded.");
|
GD.Print("SavegameService: SaveFile not loaded.");
|
||||||
return saveData;
|
return saveData;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SaveDatas.ContainsKey(key))
|
if (SaveDatas.ContainsKey(key))
|
||||||
{
|
{
|
||||||
saveData = SaveDatas[key];
|
saveDataString = SaveDatas[key];
|
||||||
|
saveData = Json.ParseString(saveDataString).AsGodotDictionary<string, Variant>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return saveData;
|
return saveData;
|
||||||
|
|||||||
Reference in New Issue
Block a user
Is this ever used?
good catch, this is residue from an attempt at serializing the InteractionArea, which we won't do. So I'm deleting this now.