inventory refactor + inv ui interactable

This commit is contained in:
Altaezio
2025-10-13 18:38:47 +02:00
parent 433b3dfd28
commit 3ee2c8bdf1
7 changed files with 86 additions and 59 deletions

View File

@@ -38,6 +38,18 @@ tracks/1/path = NodePath("CenterContainer/ItemTexture:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.033333335),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0.27058825, 0.27058825, 0.27058825, 1), Color(0.27058825, 0.27058825, 0.27058825, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CenterContainer/NoItemTextureRect:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
@@ -71,6 +83,18 @@ tracks/1/keys = {
"update": 0,
"values": [Color(0.27022192, 0.27022192, 0.2702219, 1), Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CenterContainer/NoItemTextureRect:modulate")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0.27022192, 0.27022192, 0.2702219, 1), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2wu2x"]
_data = {
@@ -114,6 +138,7 @@ layout_mode = 2
[node name="NoItemTextureRect" type="TextureRect" parent="CenterContainer"]
unique_name_in_owner = true
visible = false
modulate = Color(0.27058825, 0.27058825, 0.27058825, 1)
custom_minimum_size = Vector2(12, 12)
layout_mode = 2
texture = SubResource("GradientTexture2D_vgckh")
@@ -142,3 +167,5 @@ stretch_mode = 4
[node name="BottomSpace" type="Control" parent="."]
layout_mode = 2
[connection signal="gui_input" from="." to="." method="_on_gui_input"]

View File

@@ -3,6 +3,7 @@ class_name InventoryGuiItem
@export var no_item_texture_path : Texture2D
signal item_clicked()
const MODULATE_INSPECTED_COLOR = Color.GRAY
@@ -25,6 +26,10 @@ func _on_mouse_excited():
if current_item:
Pointer.stop_inspect(self)
func _on_gui_input(_event: InputEvent) -> void:
if Input.is_action_just_pressed("action"):
emit_signal("item_clicked")
func inspector_info() -> Inspector.Info:
return current_item.inspector_info()

View File

@@ -1,26 +1,27 @@
extends HBoxContainer
class_name InventoryGui
@export var inventory_item_scene : PackedScene
@export var inventory_item_scene: PackedScene
var inventory_item_objects : Array[InventoryGuiItem]
var inventory_item_objects: Array[InventoryGuiItem]
func update(inventory : Inventory):
if len(inventory_item_objects) == 0 or len(inventory_item_objects) != inventory.size:
func update(inventory: Inventory):
if len(inventory_item_objects) == 0 or len(inventory_item_objects) != inventory.items.size():
for o in inventory_item_objects:
o.queue_free()
inventory_item_objects = generate_inventory_item_objects(inventory.size)
inventory_item_objects = generate_inventory_item_objects(inventory, inventory.items.size())
for i in range(inventory.size):
inventory_item_objects[i].update(
inventory.get_item(i),
i == inventory.current_item_ind and inventory.get_item(i) != null
)
for i in range(inventory.items.size()):
inventory_item_objects[i].update(inventory.get_item(i), i == inventory.current_item_ind)
func generate_inventory_item_objects(nb : int = 1) -> Array[InventoryGuiItem]:
var objects : Array[InventoryGuiItem] = []
func generate_inventory_item_objects(inventory: Inventory, nb: int = 1) -> Array[InventoryGuiItem]:
var objects: Array[InventoryGuiItem] = []
for i in range(nb):
var o = inventory_item_scene.instantiate() as InventoryGuiItem
add_child(o)
objects.append(o)
o.item_clicked.connect(func(): change_current_item_ind(inventory, i))
return objects
func change_current_item_ind(inventory: Inventory, new_ind: int):
inventory.set_current_item(new_ind)

View File

@@ -68,7 +68,7 @@ class TakeShovelStep extends Step:
return []
func is_step_over(p : Player) -> bool:
return p.inventory.length() > 0
return p.inventory.items.size() > 0
class DigLootStep extends Step:
func generate_indicators(p: Player) -> Array[InGameIndicator]: