From 2cb605261e27c4ee2cb7624d64c19e7dd80b5086 Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Wed, 17 Sep 2025 15:07:17 +0200 Subject: [PATCH] Fixed Tomato farming (again) --- prefabs/UI/Inventory/Slot.tscn | 34 +++++++++++-------- prefabs/farm/tomato_plant.tscn | 6 +++- resources/itemRepository.tres | 7 ++-- scenes/Babushka_scene_farm_outside_2d.tscn | 2 +- scenes/testing/animation_setup_test.tscn | 3 -- .../CSharp/Common/Farming/FieldBehaviour2D.cs | 5 +-- .../Common/Inventory/InventoryActionResult.cs | 4 +-- .../Common/Inventory/InventoryInstance.cs | 13 +++++-- .../CSharp/Common/Inventory/InventorySlot.cs | 12 +++++++ 9 files changed, 57 insertions(+), 29 deletions(-) diff --git a/prefabs/UI/Inventory/Slot.tscn b/prefabs/UI/Inventory/Slot.tscn index ac46040..47e5165 100644 --- a/prefabs/UI/Inventory/Slot.tscn +++ b/prefabs/UI/Inventory/Slot.tscn @@ -43,21 +43,6 @@ label_settings = SubResource("LabelSettings_7emux") horizontal_alignment = 1 vertical_alignment = 1 -[node name="AmountLabel" type="Label" parent="."] -layout_mode = 1 -anchors_preset = -1 -anchor_left = 1.0 -anchor_right = 1.0 -offset_left = -50.0 -offset_top = 9.0 -offset_right = -10.0 -offset_bottom = 49.0 -grow_horizontal = 0 -grow_vertical = 0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "999" -horizontal_alignment = 2 - [node name="Icon" type="TextureRect" parent="."] layout_mode = 1 anchors_preset = -1 @@ -73,4 +58,23 @@ texture = ExtResource("3_n5ryf") expand_mode = 4 stretch_mode = 5 +[node name="AmountLabel" type="Label" parent="."] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.99 +anchor_top = 0.92 +anchor_right = 0.99 +anchor_bottom = 0.92 +offset_left = -47.0 +offset_top = -35.0 +offset_right = -8.00001 +offset_bottom = -3.0 +grow_horizontal = 0 +grow_vertical = 0 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 25 +text = "999" +horizontal_alignment = 2 +vertical_alignment = 2 + [connection signal="gui_input" from="." to="." method="_on_gui_input"] diff --git a/prefabs/farm/tomato_plant.tscn b/prefabs/farm/tomato_plant.tscn index 0934f89..926cda0 100644 --- a/prefabs/farm/tomato_plant.tscn +++ b/prefabs/farm/tomato_plant.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=3 uid="uid://gishbn0a8eke"] +[gd_scene load_steps=13 format=3 uid="uid://gishbn0a8eke"] [ext_resource type="Script" uid="uid://cms357f23fmfy" path="res://scripts/CSharp/Common/Farming/PlantBehaviour2D.cs" id="1_66p1c"] [ext_resource type="Texture2D" uid="uid://dtr4uga5uspg" path="res://art/farm/farming/farmobjekte/tomaten/tomaten baby.png" id="2_vjw4j"] @@ -6,6 +6,7 @@ [ext_resource type="Texture2D" uid="uid://b2gu6ur2xc7s4" path="res://art/farm/farming/farmobjekte/tomaten/tomaten blume.png" id="4_hmj2d"] [ext_resource type="PackedScene" uid="uid://cqc72e4hq6bcd" path="res://prefabs/interactions/interaction_area_2d.tscn" id="5_3j24b"] [ext_resource type="PackedScene" uid="uid://dpbbroif2tnil" path="res://prefabs/interactions/generic_item_on_ground_2d.tscn" id="6_gdrin"] +[ext_resource type="Resource" uid="uid://blr8tine5m0ma" path="res://resources/items/tomato.tres" id="7_vjw4j"] [ext_resource type="Texture2D" uid="uid://cnwd3mb3jnuxm" path="res://art/farm/farming/farmobjekte/tomaten/teen adulte tomaten.png" id="8_evgr8"] [ext_resource type="Texture2D" uid="uid://bleimj6jr1jka" path="res://art/general/rectangle.png" id="9_vjw4j"] @@ -150,6 +151,9 @@ shape = SubResource("CircleShape2D_vjw4j") position = Vector2(0, 2.3) IsActive = false +[node name="SpawnWithItem" parent="ReadyPlantInventoryItem" index="0"] +_blueprint = ExtResource("7_vjw4j") + [node name="ItemLabel" parent="ReadyPlantInventoryItem" index="1"] visible = false z_index = 100 diff --git a/resources/itemRepository.tres b/resources/itemRepository.tres index bbec729..ad034db 100644 --- a/resources/itemRepository.tres +++ b/resources/itemRepository.tres @@ -1,8 +1,11 @@ -[gd_resource type="Resource" script_class="ItemRepository" load_steps=2 format=3 uid="uid://d284vxftxhym0"] +[gd_resource type="Resource" script_class="ItemRepository" load_steps=3 format=3 uid="uid://d284vxftxhym0"] +[ext_resource type="Resource" uid="uid://d1uuxp1lp4aro" path="res://resources/items/tomato_seed.tres" id="1_67bbe"] [ext_resource type="Script" uid="uid://oafmfqkdqewd" path="res://scripts/CSharp/Common/Inventory/ItemRepository.cs" id="1_ew4x0"] [resource] script = ExtResource("1_ew4x0") -itemInventoryRepository = Dictionary[Object, String]({}) +itemInventoryRepository = Dictionary[Object, String]({ +ExtResource("1_67bbe"): "res://prefabs/farm/tomato_plant.tscn" +}) metadata/_custom_type_script = "uid://oafmfqkdqewd" diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index 4f3ce9a..45028ef 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -1092,7 +1092,7 @@ shape = SubResource("CircleShape2D_tm0yg") [node name="SeedPickup" parent="YSorted" instance=ExtResource("25_hukxv")] position = Vector2(10114, 2469) -_infiniteSupply = true +_finiteSupply = 3 [node name="SpawnWithItem" parent="YSorted/SeedPickup" index="0"] _blueprint = ExtResource("35_64mdn") diff --git a/scenes/testing/animation_setup_test.tscn b/scenes/testing/animation_setup_test.tscn index edba314..29e4c9d 100644 --- a/scenes/testing/animation_setup_test.tscn +++ b/scenes/testing/animation_setup_test.tscn @@ -72,7 +72,6 @@ rest = Transform2D(1, 0, 0, 1, 24.3826, -1.82351) [node name="head" type="Bone2D" parent="Vesna/Skeleton2D/hip/chest/neck"] position = Vector2(13.2948, -0.197781) rotation = 1.52891 -scale = Vector2(1, 1) rest = Transform2D(0.0418757, 0.999123, -0.999123, 0.0418757, 13.2948, -0.197781) [node name="armR" type="Bone2D" parent="Vesna/Skeleton2D/hip/chest"] @@ -84,7 +83,6 @@ rest = Transform2D(-0.674355, -0.0959749, 0.0959749, -0.674355, 19.1624, -26.827 [node name="forearmR" type="Bone2D" parent="Vesna/Skeleton2D/hip/chest/armR"] position = Vector2(26.3157, -1.29047) rotation = -2.2602 -scale = Vector2(1, 1) rest = Transform2D(-0.636078, -0.771625, 0.771625, -0.636078, 26.3157, -1.29047) [node name="handR" type="Bone2D" parent="Vesna/Skeleton2D/hip/chest/armR/forearmR"] @@ -101,5 +99,4 @@ rest = Transform2D(-0.99956, -0.0296662, 0.0296662, -0.99956, -4.51055, -13.9084 [node name="legRLower" type="Bone2D" parent="Vesna/Skeleton2D/hip/legR"] position = Vector2(24.8604, -0.524962) rotation = -3.11367 -scale = Vector2(1, 1) rest = Transform2D(-0.99961, -0.0279217, 0.0279217, -0.99961, 24.8604, -0.524962) diff --git a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs index 545ec38..19ad9d0 100644 --- a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs +++ b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs @@ -81,7 +81,7 @@ public partial class FieldBehaviour2D : Sprite2D int currentSlotIndex = InventoryManager.Instance.CurrentSelectedSlotIndex; ItemInstance? item = InventoryManager.Instance.playerInventory.Slots[currentSlotIndex].itemInstance; - if (item == null || PlantingPlaceholder.GetChildCount() > 0) + if (item == null || PlantingPlaceholder.GetChildCount() > 0 || item.amount == 0) return success; string prefabPath = ItemRepository.TryGetPrefabPath(item.blueprint); @@ -98,7 +98,8 @@ public partial class FieldBehaviour2D : Sprite2D { plantBehaviour.Field = this; } - + + InventoryManager.Instance.playerInventory.RemoveItem(currentSlotIndex); success = true; } diff --git a/scripts/CSharp/Common/Inventory/InventoryActionResult.cs b/scripts/CSharp/Common/Inventory/InventoryActionResult.cs index be9c0e5..14efb3e 100644 --- a/scripts/CSharp/Common/Inventory/InventoryActionResult.cs +++ b/scripts/CSharp/Common/Inventory/InventoryActionResult.cs @@ -3,8 +3,8 @@ public enum InventoryActionResult { Success, - DestinationDoesNotExists, + DestinationDoesNotExist, DestinationFull, - SourceDoesNotExists, + SourceDoesNotExist, SourceIsEmpty } diff --git a/scripts/CSharp/Common/Inventory/InventoryInstance.cs b/scripts/CSharp/Common/Inventory/InventoryInstance.cs index 8812fe7..f4b17e1 100644 --- a/scripts/CSharp/Common/Inventory/InventoryInstance.cs +++ b/scripts/CSharp/Common/Inventory/InventoryInstance.cs @@ -17,6 +17,9 @@ public partial class InventoryInstance : Node [Signal] public delegate void InventoryContentsChangedEventHandler(); + /// + /// The total amount of Inventoryslots in the inventory (empty and occupied). + /// [Export] public int SlotAmount { @@ -49,7 +52,7 @@ public partial class InventoryInstance : Node private InventoryActionResult AddItemAndStackRecursive(ItemInstance newItem, int slotSearch) { if (newItem.blueprint == null || newItem.amount == 0) - return InventoryActionResult.SourceDoesNotExists; + return InventoryActionResult.SourceDoesNotExist; var slotIndex = -1; // find stackable slot @@ -97,7 +100,7 @@ public partial class InventoryInstance : Node if (inventorySlot < 0 || inventorySlot >= _slots.Count) { itemInstance = null; - return InventoryActionResult.SourceDoesNotExists; + return InventoryActionResult.SourceDoesNotExist; } if (_slots[inventorySlot].IsEmpty()) @@ -107,6 +110,10 @@ public partial class InventoryInstance : Node } itemInstance = _slots[inventorySlot].itemInstance; + if (itemInstance == null) + return InventoryActionResult.SourceDoesNotExist; + + itemInstance.amount -= 1; _slots[inventorySlot].itemInstance = null; EmitSignal(SignalName.InventoryContentsChanged); return InventoryActionResult.Success; @@ -120,7 +127,7 @@ public partial class InventoryInstance : Node public InventoryActionResult AddItemToSlot(ItemInstance itemInstance, int destinationSlot) { if (destinationSlot < 0 || destinationSlot >= _slots.Count) - return InventoryActionResult.DestinationDoesNotExists; + return InventoryActionResult.DestinationDoesNotExist; if (!_slots[destinationSlot].IsEmpty()) return InventoryActionResult.DestinationFull; diff --git a/scripts/CSharp/Common/Inventory/InventorySlot.cs b/scripts/CSharp/Common/Inventory/InventorySlot.cs index 9ee5a5a..fec8f36 100644 --- a/scripts/CSharp/Common/Inventory/InventorySlot.cs +++ b/scripts/CSharp/Common/Inventory/InventorySlot.cs @@ -1,9 +1,21 @@ #nullable enable namespace Babushka.scripts.CSharp.Common.Inventory; +/// +/// Represents a virtual object wrapper for an item instance. +/// Can return the containing item or null. +/// public class InventorySlot { + /// + /// The inventory item instance that may or may not be bound to this slot. + /// public ItemInstance? itemInstance; + + /// + /// Whether or not this slot is currently occupied by an item instance. + /// + /// public bool IsEmpty() { return itemInstance == null;