Files
Babushka/scripts/CSharp/Low Code/Variables/SaveableVariableNode.cs
T

68 lines
1.7 KiB
C#
Raw Normal View History

using Babushka.scripts.CSharp.Common.Savegame;
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Low_Code.Variables;
public partial class SaveableVariableNode : VariableNode, ISaveable
{
2025-12-02 15:45:44 +01:00
[Export] private bool _debug;
2025-12-03 17:04:38 +01:00
[Signal]
public delegate void OnLoadingCompleteEventHandler();
2025-12-02 15:45:44 +01:00
public override void _EnterTree()
{
LoadFromSaveData();
ValueChanged += UpdateSaveData;
2025-12-02 15:45:44 +01:00
SavegameService.OnSaveGameReset += SaveGameReset;
}
private void SaveGameReset()
{
Payload = default;
GD.Print($"Saveable Variable reset to {Payload}");
}
public override void _ExitTree()
{
ValueChanged -= UpdateSaveData;
2025-12-02 15:45:44 +01:00
SavegameService.OnSaveGameReset -= SaveGameReset;
}
public void UpdateSaveData()
{
var payloadData = new Dictionary<string, Variant>
{
{ "payload", Payload },
};
string id = GetMeta("SaveID").AsString();
SavegameService.AppendDataToSave( id, payloadData);
}
public void LoadFromSaveData()
{
string id = GetMeta("SaveID").AsString();
Dictionary<string, Variant> save = SavegameService.GetSaveData(id);
if (save.Count > 0)
{
if (Payload.VariantType == Variant.Type.Int)
{
Payload = save["payload"].AsInt32();
}
else
{
Payload = save["payload"];
}
2025-12-02 15:45:44 +01:00
if (_debug)
{
GD.Print($"SaveableVariable {Name} loaded payload: {Payload}.");
}
}
2025-12-03 17:04:38 +01:00
EmitSignal(SignalName.OnLoadingComplete);
}
}