refonte de l'inventaire en 3D et nettoyage des prints

This commit is contained in:
2026-02-23 00:07:04 +01:00
parent 925bf4465c
commit fa21b3a558
41 changed files with 472 additions and 611 deletions

View File

@@ -1,36 +1,47 @@
extends HBoxContainer
@tool
extends Control
class_name InventoryGui
@export var inventory_item_scene: PackedScene
@export var bar: TextureRect
const SEPARATOR_OBJECT_SIZE = 40
var inventory_item_objects: Array[InventoryGuiItem]
@export var test_size : int
@export var test_n_tool : int
var last_n_tools = -1
var last_inventory_size = 0
@export_tool_button("Test Update", "Callable") var update_action = func() : generate_inventory_mouse_detectors(test_size,test_n_tool,true)
func _ready():
GameInfo.game_data.player_data.inventory.updated.connect(update)
update(GameInfo.game_data.player_data.inventory)
if not Engine.is_editor_hint():
GameInfo.game_data.player_data.inventory.updated.connect(update)
update(GameInfo.game_data.player_data.inventory)
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, inventory.items.size())
for i in range(inventory.items.size()):
inventory_item_objects[i].update(inventory.get_item(i), i == inventory.current_item_ind)
if last_inventory_size != len(inventory.items) or last_n_tools != inventory.n_tools:
last_inventory_size = len(inventory.items)
last_n_tools = inventory.n_tools
generate_inventory_mouse_detectors(last_inventory_size, last_n_tools)
func generate_inventory_mouse_detectors(inventory_size: int, n_tool : int, test = false):
for c in %InventoryMouseDetectors.get_children():
c.queue_free()
move_child(bar, inventory.n_tools)
bar.visible = inventory.n_tools > 0 && inventory.items.size() > inventory.n_tools
for i in range(inventory_size):
if i == n_tool:
%InventoryMouseDetectors.add_child(generate_separator(test))
%InventoryMouseDetectors.add_child(generate_item_mouse_detector(i, test))
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)
move_child(o, i)
objects.append(o)
o.item_clicked.connect(func(): change_current_item_ind(inventory, i))
return objects
func generate_item_mouse_detector(index : int, test = false) -> ColorRect:
return InventoryGuiItemMouseDetector.new(index, test)
func change_current_item_ind(inventory: Inventory, new_ind: int):
inventory.set_current_item(new_ind)
func generate_separator(test = false) -> ColorRect:
var separator = ColorRect.new()
separator.custom_minimum_size = Vector2(SEPARATOR_OBJECT_SIZE, SEPARATOR_OBJECT_SIZE)
separator.color = Color.RED
if test:
separator.color.a = 0.5
else :
separator.color.a = 0.
return separator