Files
seeding-planets/gui/game/inventory_gui/scripts/inventory_3d.gd
Zacharie Guet 8062c42e7b Dev pour la béta 1
* ajout des artefacts avec la pile et l'emplacement de graine
* affichage des artefacts dans le vaisseau sur une étagère
* ajout des distributeurs d'artefacts dans les régions
* affichage des attributs de bases de plantes dans le vaisseau
* changement de l'affichage du choix des régions
* changement des icônes du détecteur
2026-04-10 16:16:54 +02:00

81 lines
2.5 KiB
GDScript

@tool
extends Node3D
class_name Inventory3D
const INVENTORY_OBJECT_SIZE = 0.2
const SEPARATOR_SIZE = 0.1
@export var inventory_item_scene: PackedScene
@export var bar: TextureRect
@export var no_tools : bool = false
@export var test_inventory : Inventory
var last_n_tools = -1
var inventory_item_objects: Array[InventoryItem3D] = []
@export_tool_button("Test Update", "Callable") var update_action = func() : update(test_inventory)
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):
var items = inventory.get_all_items()
if no_tools:
items = inventory.seeds
if len(items) != len(inventory_item_objects) or last_n_tools != len(inventory.tools):
create_inventory_objects(inventory)
for i in range(len(items)):
var item : Item= items[i]
var object : InventoryItem3D = inventory_item_objects[i]
object.item = items[i]
if not no_tools:
if inventory.current_item_ind == i:
object.state = (
InventoryItem3D.State.TOOL if i < len(inventory.tools)
else InventoryItem3D.State.ITEM
)
else:
object.state = InventoryItem3D.State.BLACK
func create_inventory_objects(inventory : Inventory):
for c in %Items3D.get_children():
c.queue_free()
last_n_tools = len(inventory.tools)
inventory_item_objects = []
var items = inventory.get_all_items()
if no_tools:
items = inventory.seeds
for i in range(len(items)):
var new_inventory_object := (inventory_item_scene.instantiate() as InventoryItem3D)
%Items3D.add_child(new_inventory_object)
new_inventory_object.position.x = -INVENTORY_OBJECT_SIZE * i
if i >= len(inventory.tools) and not no_tools:
new_inventory_object.position.x -= SEPARATOR_SIZE
inventory_item_objects.append(new_inventory_object)
%ItemSeparator.visible = not no_tools
if no_tools:
%Items3D.position.x = (
(len(inventory_item_objects) - 1) * INVENTORY_OBJECT_SIZE
) / 2
else:
%Items3D.position.x = (
(len(inventory_item_objects) - 1) * INVENTORY_OBJECT_SIZE + SEPARATOR_SIZE
) / 2
%ItemSeparator.position.x = (
%Items3D.position.x
- (inventory.tools.size()) * INVENTORY_OBJECT_SIZE
+ SEPARATOR_SIZE/2
)