67 lines
2.6 KiB
GDScript
67 lines
2.6 KiB
GDScript
extends PanelContainer
|
|
|
|
const SLOT_SCENE := preload("res://scenes/ui/inventory_slot_view.tscn")
|
|
const CARGO_SIZE := 20
|
|
|
|
@onready var cargo_grid: GridContainer = $Contents/CargoGrid
|
|
@onready var close_button: Button = $Contents/Header/CloseButton
|
|
@onready var title_label: Label = $Contents/Header/Title
|
|
@onready var ammunition_label: Label = $Contents/Ammunition/Count
|
|
|
|
var _inventory: ShipInventory
|
|
var _drawer_open := false
|
|
var _slide_tween: Tween
|
|
var _minerals_label: Label
|
|
var drawer_width := 560.0
|
|
|
|
func _ready() -> void:
|
|
close_button.pressed.connect(close_drawer)
|
|
_minerals_label = Label.new()
|
|
_minerals_label.add_theme_font_size_override("font_size", 10)
|
|
$Contents.add_child(_minerals_label)
|
|
$Contents.move_child(_minerals_label, $Contents/CargoGrid.get_index())
|
|
_inventory = get_tree().get_first_node_in_group("ship_inventory") as ShipInventory
|
|
if _inventory:
|
|
_inventory.inventory_changed.connect(_refresh_title)
|
|
_inventory.ammunition_changed.connect(_refresh_title)
|
|
GameState.captain.changed.connect(_refresh_title)
|
|
for index in CARGO_SIZE:
|
|
var slot := SLOT_SCENE.instantiate()
|
|
slot.set("slot_kind", "cargo")
|
|
slot.set("slot_index", index)
|
|
cargo_grid.add_child(slot)
|
|
_refresh_title()
|
|
|
|
func _refresh_title() -> void:
|
|
_minerals_label.text = "SUROWCE · Tytan: %d · Żelazo: %d · Aluminium: %d" % [GameState.captain.minerals.get("titanium", 0), GameState.captain.minerals.get("iron", 0), GameState.captain.minerals.get("aluminium", 0)]
|
|
if _inventory:
|
|
title_label.text = "MAGAZYN (%d/%d) · Części: %.1f" % [_inventory.get_cargo_used(), CARGO_SIZE, GameState.captain.parts]
|
|
ammunition_label.text = "AMUNICJA: %d · RAKIETY: %d" % [_inventory.ammunition, _inventory.get_missile_count()]
|
|
|
|
func toggle_drawer() -> void:
|
|
_set_drawer_open(not _drawer_open)
|
|
|
|
func close_drawer(immediately: bool = false) -> void:
|
|
if immediately:
|
|
if _slide_tween != null and _slide_tween.is_running():
|
|
_slide_tween.kill()
|
|
_drawer_open = false
|
|
GameState.hud_panel_state["inventory_open"] = false
|
|
position.x = drawer_width
|
|
hide()
|
|
return
|
|
_set_drawer_open(false)
|
|
|
|
func _set_drawer_open(value: bool) -> void:
|
|
if _slide_tween != null and _slide_tween.is_running():
|
|
_slide_tween.kill()
|
|
_drawer_open = value
|
|
GameState.hud_panel_state["inventory_open"] = value
|
|
if value and not visible:
|
|
position = Vector2(drawer_width, 0)
|
|
show()
|
|
_slide_tween = create_tween()
|
|
_slide_tween.tween_property(self, "position:x", 0.0 if value else drawer_width, 0.25).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT if value else Tween.EASE_IN)
|
|
if not value:
|
|
_slide_tween.tween_callback(hide)
|