From 8fdb395ae801d9c92ca8f18a6932c27a60b0c69a Mon Sep 17 00:00:00 2001 From: cblech Date: Tue, 20 May 2025 19:48:49 +0200 Subject: [PATCH] Added icon to slot --- prefabs/UI/Inventory/Inventory.tscn | 9 ++-- prefabs/UI/Inventory/Slot.tscn | 19 +++++++- resources/items/bucket.tres | 6 ++- resources/items/hoe.tres | 6 ++- resources/items/tomato.tres | 12 +++++ resources/items/tomato_seed.tres | 4 +- .../Common/Inventory/InventoryTestScript.cs | 13 +++--- .../CSharp/Common/Inventory/InventoryUi.cs | 46 ++++++++++++++----- .../CSharp/Common/Inventory/ItemResource.cs | 3 ++ scripts/CSharp/Common/Inventory/SlotUi.cs | 2 + 10 files changed, 91 insertions(+), 29 deletions(-) create mode 100644 resources/items/tomato.tres diff --git a/prefabs/UI/Inventory/Inventory.tscn b/prefabs/UI/Inventory/Inventory.tscn index 17a9d12..274889a 100644 --- a/prefabs/UI/Inventory/Inventory.tscn +++ b/prefabs/UI/Inventory/Inventory.tscn @@ -1,12 +1,15 @@ -[gd_scene load_steps=8 format=3 uid="uid://cgjc4wurbgimy"] +[gd_scene load_steps=11 format=3 uid="uid://cgjc4wurbgimy"] [ext_resource type="Script" uid="uid://hg7jay2kt441" path="res://scripts/CSharp/Common/Inventory/InventoryUi.cs" id="1_6wusm"] [ext_resource type="Script" uid="uid://b2jhdxcrhtm2d" path="res://scripts/CSharp/Common/Inventory/InventoryTestScript.cs" id="3_exrk4"] [ext_resource type="Texture2D" uid="uid://3ln8aleyxgp1" path="res://art/ui/UI/UI_bag_export_01.png" id="3_vvo7l"] -[ext_resource type="Resource" uid="uid://datee0flk1e84" path="res://resources/items/pickaxe.tres" id="4_5fdxq"] [ext_resource type="Texture2D" uid="uid://dcidjcsqk12p1" path="res://art/ui/UI/UI_bag_export_02.png" id="4_df8i8"] [ext_resource type="Texture2D" uid="uid://c7wqla0mbu3np" path="res://art/ui/babushka_ui_tmp_inventory_select.png" id="4_tiss4"] [ext_resource type="PackedScene" uid="uid://c0kmdjeqkqrwv" path="res://prefabs/UI/Inventory/Slot.tscn" id="5_u7kje"] +[ext_resource type="Resource" uid="uid://blr8tine5m0ma" path="res://resources/items/tomato.tres" id="7_l3npx"] +[ext_resource type="Resource" uid="uid://c5yg3lx756v4v" path="res://resources/items/hoe.tres" id="7_vvo7l"] +[ext_resource type="Resource" uid="uid://d1uuxp1lp4aro" path="res://resources/items/tomato_seed.tres" id="8_nw1un"] +[ext_resource type="Resource" uid="uid://c7viddcd3kywp" path="res://resources/items/axe.tres" id="10_o7h8q"] [node name="CanvasLayer" type="CanvasLayer"] layer = 90 @@ -370,4 +373,4 @@ offset_bottom = 612.0 [node name="InventoryTester" type="Node" parent="Inventory"] script = ExtResource("3_exrk4") -_testItemToCreate = ExtResource("4_5fdxq") +_testItemsToCreate = Array[Object]([ExtResource("7_l3npx"), ExtResource("7_l3npx"), ExtResource("8_nw1un"), ExtResource("7_vvo7l"), ExtResource("10_o7h8q"), ExtResource("7_l3npx"), ExtResource("8_nw1un"), ExtResource("8_nw1un"), ExtResource("8_nw1un"), ExtResource("8_nw1un"), ExtResource("7_vvo7l")]) diff --git a/prefabs/UI/Inventory/Slot.tscn b/prefabs/UI/Inventory/Slot.tscn index f5210c8..fa2ff0e 100644 --- a/prefabs/UI/Inventory/Slot.tscn +++ b/prefabs/UI/Inventory/Slot.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=4 format=3 uid="uid://c0kmdjeqkqrwv"] +[gd_scene load_steps=5 format=3 uid="uid://c0kmdjeqkqrwv"] [ext_resource type="Script" uid="uid://bh6wcyxh1f0cv" path="res://scripts/CSharp/Common/Inventory/SlotUi.cs" id="1_au0l0"] [ext_resource type="Texture2D" uid="uid://0p52bm8b1nrl" path="res://art/ui/UI/inventory_standard.png" id="2_7emux"] +[ext_resource type="Texture2D" uid="uid://cfxibry711o16" path="res://art/ui/UI/icons/icon-scythe.png" id="3_n5ryf"] [sub_resource type="LabelSettings" id="LabelSettings_7emux"] font_size = 15 @@ -15,7 +16,7 @@ offset_right = 100.0 offset_bottom = 100.0 script = ExtResource("1_au0l0") -[node name="TextureRect" type="TextureRect" parent="."] +[node name="SlotBackground" type="TextureRect" parent="."] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -57,4 +58,18 @@ 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 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 10.0 +offset_top = 10.0 +offset_right = -10.0 +offset_bottom = -10.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_n5ryf") +expand_mode = 1 + [connection signal="gui_input" from="." to="." method="_on_gui_input"] diff --git a/resources/items/bucket.tres b/resources/items/bucket.tres index 2005ad5..7664fa0 100644 --- a/resources/items/bucket.tres +++ b/resources/items/bucket.tres @@ -1,10 +1,12 @@ -[gd_resource type="Resource" script_class="ItemResource" load_steps=2 format=3 uid="uid://cndd64batns31"] +[gd_resource type="Resource" script_class="ItemResource" load_steps=3 format=3 uid="uid://cndd64batns31"] [ext_resource type="Script" uid="uid://cbskymrxs6ksu" path="res://scripts/CSharp/Common/Inventory/ItemResource.cs" id="1_8k5aa"] +[ext_resource type="Texture2D" uid="uid://bh7oo5mypstyp" path="res://art/ui/UI/icons/icon-watercan.png" id="1_roi0v"] [resource] script = ExtResource("1_8k5aa") -name = "Buck the Bucket" +name = "Can" color = Color(0.336269, 0.489145, 0.825324, 1) +icon = ExtResource("1_roi0v") maxStack = 1 metadata/_custom_type_script = "uid://cbskymrxs6ksu" diff --git a/resources/items/hoe.tres b/resources/items/hoe.tres index a7960d7..fc9d507 100644 --- a/resources/items/hoe.tres +++ b/resources/items/hoe.tres @@ -1,10 +1,12 @@ -[gd_resource type="Resource" script_class="ItemResource" load_steps=2 format=3 uid="uid://c5yg3lx756v4v"] +[gd_resource type="Resource" script_class="ItemResource" load_steps=3 format=3 uid="uid://c5yg3lx756v4v"] [ext_resource type="Script" uid="uid://cbskymrxs6ksu" path="res://scripts/CSharp/Common/Inventory/ItemResource.cs" id="1_06nef"] +[ext_resource type="Texture2D" uid="uid://cfxibry711o16" path="res://art/ui/UI/icons/icon-scythe.png" id="1_jd58x"] [resource] script = ExtResource("1_06nef") -name = "Your Mom" +name = "Hoe" color = Color(0.751421, 0.329615, 0.570911, 1) +icon = ExtResource("1_jd58x") maxStack = 1 metadata/_custom_type_script = "uid://cbskymrxs6ksu" diff --git a/resources/items/tomato.tres b/resources/items/tomato.tres new file mode 100644 index 0000000..0cf6384 --- /dev/null +++ b/resources/items/tomato.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="ItemResource" load_steps=3 format=3 uid="uid://blr8tine5m0ma"] + +[ext_resource type="Texture2D" uid="uid://c3wht0nakaki1" path="res://art/ui/UI/icons/icon-fruit-tomatoe.png" id="1_k7rt3"] +[ext_resource type="Script" uid="uid://cbskymrxs6ksu" path="res://scripts/CSharp/Common/Inventory/ItemResource.cs" id="1_olvff"] + +[resource] +script = ExtResource("1_olvff") +name = "Tomato" +color = Color(0.941176, 0, 0, 1) +icon = ExtResource("1_k7rt3") +maxStack = 20 +metadata/_custom_type_script = "uid://cbskymrxs6ksu" diff --git a/resources/items/tomato_seed.tres b/resources/items/tomato_seed.tres index 79abe3e..e778349 100644 --- a/resources/items/tomato_seed.tres +++ b/resources/items/tomato_seed.tres @@ -1,10 +1,12 @@ -[gd_resource type="Resource" script_class="ItemResource" load_steps=2 format=3 uid="uid://d1uuxp1lp4aro"] +[gd_resource type="Resource" script_class="ItemResource" load_steps=3 format=3 uid="uid://d1uuxp1lp4aro"] [ext_resource type="Script" uid="uid://cbskymrxs6ksu" path="res://scripts/CSharp/Common/Inventory/ItemResource.cs" id="1_dustj"] +[ext_resource type="Texture2D" uid="uid://ce04nexh36uwe" path="res://art/ui/UI/icons/icon-seed-tomatoe.png" id="1_u15c2"] [resource] script = ExtResource("1_dustj") name = "Tomato Seed" color = Color(0.135039, 0.307214, 0.333128, 1) +icon = ExtResource("1_u15c2") maxStack = 20 metadata/_custom_type_script = "uid://cbskymrxs6ksu" diff --git a/scripts/CSharp/Common/Inventory/InventoryTestScript.cs b/scripts/CSharp/Common/Inventory/InventoryTestScript.cs index a19a049..b7a1cc4 100644 --- a/scripts/CSharp/Common/Inventory/InventoryTestScript.cs +++ b/scripts/CSharp/Common/Inventory/InventoryTestScript.cs @@ -3,15 +3,14 @@ namespace Babushka.scripts.CSharp.Common.Inventory; public partial class InventoryTestScript : Node { - [Export] - private ItemResource _testItemToCreate; + [Export(PropertyHint.ArrayType)] + private ItemResource[] _testItemsToCreate; public override void _Ready() { - InventoryManager.Instance.CreateItem(_testItemToCreate, InventoryManager.Instance.playerInventory); - InventoryManager.Instance.CreateItem(_testItemToCreate, InventoryManager.Instance.playerInventory); - InventoryManager.Instance.CreateItem(_testItemToCreate, InventoryManager.Instance.playerInventory); - InventoryManager.Instance.CreateItem(_testItemToCreate, InventoryManager.Instance.playerInventory); - GD.Print("Added items"); + foreach (var itemResource in _testItemsToCreate) + { + InventoryManager.Instance.CreateItem(itemResource, InventoryManager.Instance.playerInventory); + } } } diff --git a/scripts/CSharp/Common/Inventory/InventoryUi.cs b/scripts/CSharp/Common/Inventory/InventoryUi.cs index 06caa09..2a64944 100644 --- a/scripts/CSharp/Common/Inventory/InventoryUi.cs +++ b/scripts/CSharp/Common/Inventory/InventoryUi.cs @@ -16,7 +16,7 @@ public partial class InventoryUi : Control [Export] private float _inventoryClosedOffset = 0f; - + [Export] private float _inventoryOpenedOffset = 200f; @@ -46,15 +46,37 @@ public partial class InventoryUi : Control var inventorySlot = _playerInventory.Slots[i]; var uiSlot = _slots.GetChild(i) as SlotUi; - uiSlot!.nameLabel.Text = inventorySlot.itemInstance?.blueprint.name ?? ""; - uiSlot!.nameLabel.LabelSettings = uiSlot!.nameLabel.LabelSettings.Duplicate() as LabelSettings; - uiSlot!.nameLabel.LabelSettings!.FontColor = inventorySlot.itemInstance?.blueprint.color ?? Colors.White; - - var amountText = inventorySlot.itemInstance != null && - inventorySlot.itemInstance.amount != 1 - ? inventorySlot.itemInstance.amount.ToString() - : ""; - uiSlot!.amountLabel.Text = amountText; + if (inventorySlot.itemInstance != null) + { + var blueprint = inventorySlot.itemInstance.blueprint; + var amount = inventorySlot.itemInstance.amount; + + if (blueprint.icon != null) + { + // show icon + uiSlot!.nameLabel.Text = ""; + + uiSlot.icon.Texture = blueprint.icon; + } + else + { + // show name label + uiSlot!.nameLabel.Text = inventorySlot.itemInstance.blueprint.name; + uiSlot!.nameLabel.LabelSettings = uiSlot!.nameLabel.LabelSettings.Duplicate() as LabelSettings; + uiSlot!.nameLabel.LabelSettings!.FontColor = inventorySlot.itemInstance?.blueprint.color ?? Colors.White; + + uiSlot.icon.Texture = null; + } + + // amount + uiSlot!.amountLabel.Text = amount != 1 ? amount.ToString() : ""; + } + else + { + uiSlot!.nameLabel.Text = ""; + uiSlot!.icon.Texture = null; + uiSlot!.amountLabel.Text = ""; + } } } @@ -74,7 +96,7 @@ public partial class InventoryUi : Control _slots.AddChild(slotInstance); } } - + private void SubscribeSlots() { for (var index = 0; index < _playerInventory.Slots.Count; index++) @@ -167,4 +189,4 @@ public partial class InventoryUi : Control _slotOnMouse = null; } } -} \ No newline at end of file +} diff --git a/scripts/CSharp/Common/Inventory/ItemResource.cs b/scripts/CSharp/Common/Inventory/ItemResource.cs index c6c8b88..0e0ed89 100644 --- a/scripts/CSharp/Common/Inventory/ItemResource.cs +++ b/scripts/CSharp/Common/Inventory/ItemResource.cs @@ -10,6 +10,9 @@ public partial class ItemResource : Resource [Export] public Color color; + [Export] + public Texture2D? icon; + [Export] public int maxStack; diff --git a/scripts/CSharp/Common/Inventory/SlotUi.cs b/scripts/CSharp/Common/Inventory/SlotUi.cs index 753447d..e9ca07b 100644 --- a/scripts/CSharp/Common/Inventory/SlotUi.cs +++ b/scripts/CSharp/Common/Inventory/SlotUi.cs @@ -8,6 +8,7 @@ public partial class SlotUi : Control public Label nameLabel; public int index; public Label amountLabel; + public TextureRect icon; [Signal] public delegate void ClickedEventHandler(int index); @@ -15,6 +16,7 @@ public partial class SlotUi : Control { nameLabel = GetNode