From 83f4144b431149076f1607c0ef7947eb20ad374d Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Tue, 20 May 2025 23:05:26 +0200 Subject: [PATCH] Reworked farming tools pickup animations --- scenes/Babushka_scene_farm_outside_2d.tscn | 6 +++ .../Common/CharacterControls/Player2D.cs | 47 ++++++++++++++++++- .../Common/Inventory/InventoryManager.cs | 1 + 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index 2029031..ffee3e4 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -684,6 +684,10 @@ z_index = 1 position = Vector2(1071, 2125) _fieldParent = NodePath("../Farm visuals/FieldParent") +[node name="CharacterBody2D" parent="YSorted/Player2d" index="0"] +_hoe = ExtResource("28_6b2nr") +_wateringCan = ExtResource("28_ipqaa") + [node name="BrĂ¼nnen" type="Sprite2D" parent="YSorted"] z_index = 1 y_sort_enabled = true @@ -792,6 +796,7 @@ position = Vector2(13772, 2960) shape = SubResource("RectangleShape2D_p6n74") [node name="Hoe Pickup" parent="." node_paths=PackedStringArray("_sprites") instance=ExtResource("27_klb81")] +visible = false position = Vector2(7728, 2000) rotation = 3.3074 _sprites = NodePath("SpriteSwitcher2d") @@ -806,6 +811,7 @@ shape = SubResource("CircleShape2D_kxdmn") scale = Vector2(0.5, 0.5) [node name="Watercan Pickup" parent="." node_paths=PackedStringArray("_sprites") instance=ExtResource("27_klb81")] +visible = false position = Vector2(8400, 2024) _sprites = NodePath("ActiveInactive") _id = 1 diff --git a/scripts/CSharp/Common/CharacterControls/Player2D.cs b/scripts/CSharp/Common/CharacterControls/Player2D.cs index 2da18b6..38d7196 100644 --- a/scripts/CSharp/Common/CharacterControls/Player2D.cs +++ b/scripts/CSharp/Common/CharacterControls/Player2D.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; +using Babushka.scripts.CSharp.Common.Inventory; using Godot; namespace Babushka.scripts.CSharp.Common.CharacterControls; @@ -9,6 +10,8 @@ public partial class Player2D : CharacterBody2D [Export] private float _speed = 100f; [Export] private AnimatedSprite2D _sprite; [Export] private SceneTree.GroupCallFlags _fieldFlags; + [Export] private ItemResource _hoe; + [Export] private ItemResource _wateringCan; // -1 means no tool. private int _toolID = -1; @@ -18,7 +21,48 @@ public partial class Player2D : CharacterBody2D private bool _pickupAnimationInProgress; private bool _farmingAnimationInProgress; private Vector2 _lastDirection = Vector2.Zero; - + private InventoryManager _inventoryManager; + private InventoryInstance _inventoryInstance; + + public override void _Ready() + { + _inventoryManager = InventoryManager.Instance; + _inventoryInstance = _inventoryManager.playerInventory; + _inventoryManager.SlotIndexChanged += HandleInventorySelectedSlotIndexChanged; + _inventoryInstance.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! + PlayPickUpAnimation(); + } + + private void HandleInventorySelectedSlotIndexChanged(int newIndex) + { + InventorySlot currentSlot = InventoryManager.Instance.GetCurrentSelectedSlot(); + ItemInstance? currentItem = currentSlot.itemInstance; + + if (currentItem == null) + return; + + if (currentItem.blueprint == _hoe) + { + ActivateTool(true, 0); + return; + } + + if (currentItem.blueprint == _wateringCan) + { + ActivateTool(true, 1); + return; + } + + ActivateTool(false, 0); + ActivateTool(false, 1); + + } + public override void _Process(double delta) { anyActionPressed = false; @@ -99,7 +143,6 @@ public partial class Player2D : CharacterBody2D if (success) { _toolID = id; - PlayPickUpAnimation(); } else _toolID = -1; diff --git a/scripts/CSharp/Common/Inventory/InventoryManager.cs b/scripts/CSharp/Common/Inventory/InventoryManager.cs index edc8c47..24b3ac1 100644 --- a/scripts/CSharp/Common/Inventory/InventoryManager.cs +++ b/scripts/CSharp/Common/Inventory/InventoryManager.cs @@ -8,6 +8,7 @@ public partial class InventoryManager : Node [Signal] public delegate void SlotIndexChangedEventHandler(int newIndex); + public static InventoryManager Instance { get; private set; } = null!; public int CurrentSelectedSlotIndex {