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