47 lines
1.6 KiB
GDScript
47 lines
1.6 KiB
GDScript
@tool
|
|
extends Control
|
|
class_name InventoryGui
|
|
|
|
const SEPARATOR_OBJECT_SIZE = 40
|
|
|
|
@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():
|
|
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 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()
|
|
|
|
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_item_mouse_detector(index : int, test = false) -> ColorRect:
|
|
return InventoryGuiItemMouseDetector.new(index, test)
|
|
|
|
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 |