Make SaveableVariableNodes and a simple cheat to count up days

This commit is contained in:
2025-11-26 18:00:45 +01:00
parent f32033cb5f
commit 684131f495
7 changed files with 117 additions and 2 deletions
@@ -0,0 +1,19 @@
using Babushka.scripts.CSharp.Low_Code.Variables;
using Godot;
namespace Babushka.scripts.CSharp.Common.DayAndNight;
public partial class CalendarController : Node
{
[Export] private SaveableVariableNode _dayCounter;
public override void _Input(InputEvent @event)
{
if (@event.IsActionPressed("NextDayCheat"))
{
int days = _dayCounter.Payload.AsInt32();
days++;
_dayCounter.Payload = days;
}
}
}
@@ -0,0 +1 @@
uid://du5facslfvg77
@@ -0,0 +1,48 @@
using Babushka.scripts.CSharp.Common.Savegame;
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Low_Code.Variables;
public partial class SaveableVariableNode : VariableNode, ISaveable
{
public override void _Ready()
{
LoadFromSaveData();
ValueChanged += UpdateSaveData;
}
public override void _ExitTree()
{
ValueChanged -= UpdateSaveData;
}
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"];
}
}
}
}
@@ -0,0 +1 @@
uid://d27xoo1reo5gu
@@ -7,5 +7,23 @@ namespace Babushka.scripts.CSharp.Low_Code.Variables;
/// </summary>
public partial class VariableNode : Node
{
[Export] public Variant Payload { get; set; }
[Export] public Variant Payload
{
get
{
return _payload;
}
set
{
if (_payload.Equals(value))
return;
_payload = value;
EmitSignal(SignalName.ValueChanged);
}
}
private Variant _payload;
[Signal] public delegate void ValueChangedEventHandler();
}