From a401cbe5b907a0871035f603ea1490380a156be3 Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Tue, 16 Dec 2025 22:53:22 +0100 Subject: [PATCH] :bug: fixed field activator self-deactivating on load bug --- prefabs/farm/base_field.tscn | 4 ++-- scripts/CSharp/Common/Farming/FieldActivator.cs | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/prefabs/farm/base_field.tscn b/prefabs/farm/base_field.tscn index 2ff20d2..71163d3 100644 --- a/prefabs/farm/base_field.tscn +++ b/prefabs/farm/base_field.tscn @@ -115,11 +115,11 @@ scale_amount_max = 0.8 color = Color(0.400601, 0.62444, 0.791217, 1) hue_variation_max = 0.4 -[node name="FieldActivator" type="Node2D" parent="." node_paths=PackedStringArray("_field", "_activatorArea") groups=["Saveable"]] +[node name="FieldActivator" type="Node2D" parent="." node_paths=PackedStringArray("_field", "_activatorArea", "_saveIdHolder")] script = ExtResource("22_57jmp") _field = NodePath("../FieldBehaviour") _activatorArea = NodePath("InteractionArea") -metadata/SaveID = "8ac5da1c-3ddd-4b76-94c2-d655a4f369c7" +_saveIdHolder = NodePath("..") [node name="InteractionArea" parent="FieldActivator" node_paths=PackedStringArray("_spritesToOutline") instance=ExtResource("7_2eegd")] _spritesToOutline = [NodePath("../../OutlineSprite")] diff --git a/scripts/CSharp/Common/Farming/FieldActivator.cs b/scripts/CSharp/Common/Farming/FieldActivator.cs index f016c0c..8017ebd 100644 --- a/scripts/CSharp/Common/Farming/FieldActivator.cs +++ b/scripts/CSharp/Common/Farming/FieldActivator.cs @@ -12,6 +12,7 @@ public partial class FieldActivator : Node, ISaveable { [Export] private FieldBehaviour2D _field; [Export] private InteractionArea2D _activatorArea; + [Export] private Node _saveIdHolder; private bool _used = false; private bool _rakeInHand; @@ -47,6 +48,7 @@ public partial class FieldActivator : Node, ISaveable /// public void RakeActivated(bool activated) { + GD.Print($"Rake was {activated}. Process mode: {ProcessMode}."); if (_used || ProcessMode == ProcessModeEnum.Disabled) return; _rakeInHand = activated; @@ -55,6 +57,7 @@ public partial class FieldActivator : Node, ISaveable private void ToggleInteractionArea() { + GD.Print($"Toggle interaction area. Used: {_used}, rake in hand: {_rakeInHand}"); _activatorArea.IsActive = !_used && _rakeInHand; } @@ -65,13 +68,18 @@ public partial class FieldActivator : Node, ISaveable { "field_activator_used", _used } }; - string id = GetMeta("SaveID").AsString(); + // Building a unique id from the top node's save id and a qualifier to make it new. + string parent_id = _saveIdHolder.GetMeta("SaveID").AsString(); + string id = $"{parent_id}_field_activator"; SavegameService.AppendDataToSave( id, payloadData); } public void LoadFromSaveData() { - string id = GetMeta("SaveID").AsString(); + GD.Print("Loading field activator save data"); + + string parent_id = _saveIdHolder.GetMeta("SaveID").AsString(); + string id = $"{parent_id}_field_activator"; Dictionary save = SavegameService.GetSaveData(id); if (save.Count > 0) @@ -80,6 +88,11 @@ public partial class FieldActivator : Node, ISaveable { _used = usedVar.AsBool(); } + else + { + _used = false; + } } + GD.Print($"Field activator used state: {_used}"); } } \ No newline at end of file