From cef878d56035b4bc1e3be756e2afd28739241c72 Mon Sep 17 00:00:00 2001 From: Kellan KOZUME Date: Tue, 14 Apr 2026 21:20:53 -0400 Subject: [PATCH] feat: add inventory HUD with signal-based updates --- autoloads/game_state.gd | 5 ++++ tests/main.tscn | 4 ++++ ui/hud.gd | 17 ++++++++++++++ ui/hud.gd.uid | 1 + ui/hud.tscn | 52 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+) create mode 100644 ui/hud.gd create mode 100644 ui/hud.gd.uid diff --git a/autoloads/game_state.gd b/autoloads/game_state.gd index f5e14f3..3c0292f 100644 --- a/autoloads/game_state.gd +++ b/autoloads/game_state.gd @@ -1,12 +1,16 @@ extends Node +signal inventory_changed + var inventory := {} func add_item(id: String) -> void: if inventory.has(id): inventory[id] += 1 + inventory_changed.emit() else: inventory[id] = 1 + inventory_changed.emit() print("Inventaire : ", inventory) func has_item(id: String) -> bool: @@ -17,3 +21,4 @@ func remove_item(id: String) -> void: inventory[id] -= 1 if inventory[id] <= 0: inventory.erase(id) + inventory_changed.emit() diff --git a/tests/main.tscn b/tests/main.tscn index edf808d..a967e6a 100644 --- a/tests/main.tscn +++ b/tests/main.tscn @@ -4,6 +4,7 @@ [ext_resource type="Texture2D" uid="uid://b2j1csoujc7gc" path="res://tests/assets/tileset/Dungeon_Tileset.png" id="2_pi5dy"] [ext_resource type="PackedScene" uid="uid://mh3msmluve7p" path="res://entities/player/player.tscn" id="3_pi5dy"] [ext_resource type="PackedScene" uid="uid://grs5ypwkxv3x" path="res://entities/items/item.tscn" id="4_gn22r"] +[ext_resource type="PackedScene" uid="uid://o7qrmpywwhu8" path="res://ui/hud.tscn" id="5_cb43m"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_gn22r"] texture = ExtResource("2_pi5dy") @@ -164,3 +165,6 @@ position = Vector2(288, 162) [node name="Item3" parent="Node2D" unique_id=589131931 instance=ExtResource("4_gn22r")] position = Vector2(186, 210) + +[node name="Hud" parent="Node2D" unique_id=1774402684 instance=ExtResource("5_cb43m")] +position = Vector2(98, 108) diff --git a/ui/hud.gd b/ui/hud.gd new file mode 100644 index 0000000..1c1ca3a --- /dev/null +++ b/ui/hud.gd @@ -0,0 +1,17 @@ +extends CanvasLayer + +@onready var engrenage_count := $InventoryPanel/Engrenage/Count +@onready var cable_count := $InventoryPanel/Cable/Count +@onready var circuit_count := $InventoryPanel/Circuit/Count + +func _ready() -> void: + GameState.inventory_changed.connect(_on_inventory_changed) + _refresh() + +func _on_inventory_changed() -> void: + _refresh() + +func _refresh() -> void: + engrenage_count.text = "x %d" % GameState.inventory.get("engrenage", 0) + cable_count.text = "x %d" % GameState.inventory.get("cable", 0) + circuit_count.text = "x %d" % GameState.inventory.get("circuit", 0) diff --git a/ui/hud.gd.uid b/ui/hud.gd.uid new file mode 100644 index 0000000..57fd37b --- /dev/null +++ b/ui/hud.gd.uid @@ -0,0 +1 @@ +uid://bmqknwqr5mtd6 diff --git a/ui/hud.tscn b/ui/hud.tscn index e882232..df7ab2a 100644 --- a/ui/hud.tscn +++ b/ui/hud.tscn @@ -1,3 +1,55 @@ [gd_scene format=3 uid="uid://o7qrmpywwhu8"] +[ext_resource type="Script" uid="uid://bmqknwqr5mtd6" path="res://ui/hud.gd" id="1_rbyyf"] +[ext_resource type="Texture2D" uid="uid://bt7xdf44qq2ud" path="res://tests/assets/sprites/ui/inventory_item_back.png" id="2_276te"] + [node name="Hud" type="Node2D" unique_id=1774402684] + +[node name="HUD" type="CanvasLayer" parent="." unique_id=1046780358] +script = ExtResource("1_rbyyf") + +[node name="InventoryPanel" type="VBoxContainer" parent="HUD" unique_id=260352894] +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -180.0 +offset_right = 320.0 +grow_vertical = 0 +alignment = 2 + +[node name="Label" type="Label" parent="HUD/InventoryPanel" unique_id=187015042] +layout_mode = 2 +text = "Inventory" + +[node name="Engrenage" type="HBoxContainer" parent="HUD/InventoryPanel" unique_id=861641794] +layout_mode = 2 + +[node name="Icon" type="TextureRect" parent="HUD/InventoryPanel/Engrenage" unique_id=397063473] +layout_mode = 2 +texture = ExtResource("2_276te") +stretch_mode = 3 + +[node name="Count" type="Label" parent="HUD/InventoryPanel/Engrenage" unique_id=650103914] +layout_mode = 2 + +[node name="Cable" type="HBoxContainer" parent="HUD/InventoryPanel" unique_id=1723351300] +layout_mode = 2 + +[node name="Icon" type="TextureRect" parent="HUD/InventoryPanel/Cable" unique_id=195427130] +layout_mode = 2 +texture = ExtResource("2_276te") +stretch_mode = 3 + +[node name="Count" type="Label" parent="HUD/InventoryPanel/Cable" unique_id=20736457] +layout_mode = 2 + +[node name="Circuit" type="HBoxContainer" parent="HUD/InventoryPanel" unique_id=578252295] +layout_mode = 2 + +[node name="Icon" type="TextureRect" parent="HUD/InventoryPanel/Circuit" unique_id=1833323471] +layout_mode = 2 +texture = ExtResource("2_276te") +stretch_mode = 3 + +[node name="Count" type="Label" parent="HUD/InventoryPanel/Circuit" unique_id=375460837] +layout_mode = 2