From b6caf4dbed8531ce38fe62ac300c2bf172a41e3e Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Tue, 2 Dec 2025 11:42:48 +0100 Subject: [PATCH] :bug: Fixed ObjectDisposedException Errors on plant/field and InventorySlot --- prefabs/farm/plants/base_plant.tscn | 1 + scripts/CSharp/Common/Animation/VesnaAnimations.cs | 9 +++++++-- scripts/CSharp/Common/Inventory/InventoryUi.cs | 1 + scripts/CSharp/Common/Inventory/ItemOnGround2D.cs | 7 +++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/prefabs/farm/plants/base_plant.tscn b/prefabs/farm/plants/base_plant.tscn index eea69a7..b234d2b 100644 --- a/prefabs/farm/plants/base_plant.tscn +++ b/prefabs/farm/plants/base_plant.tscn @@ -138,6 +138,7 @@ shape = SubResource("CircleShape2D_vjw4j") [node name="ReadyPlantInventoryItem" parent="." instance=ExtResource("6_gdrin")] position = Vector2(0, 2.3) IsActive = false +_saveToDisk = false [node name="SpawnWithItem" parent="ReadyPlantInventoryItem" index="0"] _blueprint = ExtResource("7_vjw4j") diff --git a/scripts/CSharp/Common/Animation/VesnaAnimations.cs b/scripts/CSharp/Common/Animation/VesnaAnimations.cs index 1881d2d..0a1692a 100644 --- a/scripts/CSharp/Common/Animation/VesnaAnimations.cs +++ b/scripts/CSharp/Common/Animation/VesnaAnimations.cs @@ -18,12 +18,17 @@ public partial class VesnaAnimations : Node /// Emits the last look direction of the player to other scripts. /// [Signal] public delegate void LookDirectionEventHandler(Vector2 direction); - - public override void _Ready() + + public override void _EnterTree() { InventoryManager.Instance.playerInventory.InventoryContentsChanged += HandleNewItemInInventory; } + public override void _ExitTree() + { + InventoryManager.Instance.playerInventory.InventoryContentsChanged -= HandleNewItemInInventory; + } + private void HandleNewItemInInventory() { // for future Kathi: this does not, in fact, check if an item has been added only, but triggers on every content change! diff --git a/scripts/CSharp/Common/Inventory/InventoryUi.cs b/scripts/CSharp/Common/Inventory/InventoryUi.cs index 690d1f5..11d9cfd 100644 --- a/scripts/CSharp/Common/Inventory/InventoryUi.cs +++ b/scripts/CSharp/Common/Inventory/InventoryUi.cs @@ -28,6 +28,7 @@ public partial class InventoryUi : Control public override void _ExitTree() { + InventoryManager.Instance.playerInventory.InventoryContentsChanged -= SetSlotContent; UnsubscribeSlots(); } diff --git a/scripts/CSharp/Common/Inventory/ItemOnGround2D.cs b/scripts/CSharp/Common/Inventory/ItemOnGround2D.cs index c94599c..c13f4e8 100644 --- a/scripts/CSharp/Common/Inventory/ItemOnGround2D.cs +++ b/scripts/CSharp/Common/Inventory/ItemOnGround2D.cs @@ -11,6 +11,7 @@ public partial class ItemOnGround2D : Node, ISaveable [Export] public bool IsActive = true; [Export] private bool _infiniteSupply = false; [Export] private int _finiteSupply = 1; + [Export] private bool _saveToDisk = true; private int pickUpCounter = 0; @@ -96,6 +97,9 @@ public partial class ItemOnGround2D : Node, ISaveable // todo: What do we do with instances that are created at runtime? public void UpdateSaveData() { + if (!_saveToDisk) + return; + var payloadData = new Dictionary { {"pickupCounter", pickUpCounter} @@ -107,6 +111,9 @@ public partial class ItemOnGround2D : Node, ISaveable public void LoadFromSaveData() { + if (!_saveToDisk) + return; + if (_infiniteSupply) return;