Randoloot/scripts/ui/ship_crafting_panel.gd
2026-10-12 22:16:09 +02:00

74 lines
2.7 KiB
GDScript

extends PanelContainer
var _inventory: ShipInventory
var _expanded := false
var _toggle: Button
var _details: VBoxContainer
var _parts: Label
var _stock: Label
var _ammo: Button
var _missile: Button
func _ready() -> void:
add_theme_stylebox_override("panel", StyleBoxEmpty.new())
_inventory = get_tree().get_first_node_in_group("ship_inventory") as ShipInventory
var contents := VBoxContainer.new()
contents.name = "Contents"
contents.add_theme_constant_override("separation", 6)
add_child(contents)
_toggle = Button.new()
_toggle.name = "CreateToggle"
_toggle.text = "TWÓRZ ▾"
_toggle.custom_minimum_size.y = 28
_toggle.add_theme_font_size_override("font_size", 12)
_toggle.focus_mode = Control.FOCUS_NONE
_toggle.pressed.connect(_toggle_expanded)
contents.add_child(_toggle)
_details = VBoxContainer.new()
_details.name = "CraftingDetails"
_details.add_theme_constant_override("separation", 6)
contents.add_child(_details)
_parts = _label(Color("efb568"))
_stock = _label(Color("91dbea"))
_ammo = _button("CraftAmmunition", "+%d AMUNICJI · %.0f CZĘŚCI" % [ShipInventory.AMMUNITION_CRAFT_AMOUNT, ShipInventory.AMMUNITION_CRAFT_PARTS_COST])
_ammo.tooltip_text = "Tworzy amunicję do działka maszynowego."
_ammo.pressed.connect(func() -> void: _inventory.craft_ammunition())
_missile = _button("CraftMissile", "+1 RAKIETA · %.0f CZĘŚCI" % ShipInventory.MISSILE_CRAFT_PARTS_COST)
_missile.tooltip_text = "Tworzy rakietę do dowolnej wyrzutni."
_missile.pressed.connect(func() -> void: _inventory.craft_missile())
_details.hide()
if bool(GameState.hud_panel_state.get("crafting_expanded", false)):
_toggle_expanded()
_inventory.ammunition_changed.connect(_refresh)
GameState.captain.changed.connect(_refresh)
_refresh()
func _label(color: Color) -> Label:
var label := Label.new()
label.add_theme_font_size_override("font_size", 10)
label.add_theme_color_override("font_color", color)
_details.add_child(label)
return label
func _button(node_name: String, caption: String) -> Button:
var button := Button.new()
button.name = node_name
button.text = caption
button.custom_minimum_size.y = 32
button.add_theme_font_size_override("font_size", 10)
button.focus_mode = Control.FOCUS_NONE
_details.add_child(button)
return button
func _toggle_expanded() -> void:
_expanded = not _expanded
GameState.hud_panel_state["crafting_expanded"] = _expanded
_details.visible = _expanded
_toggle.text = "TWÓRZ ▴" if _expanded else "TWÓRZ ▾"
func _refresh() -> void:
_parts.text = "DOSTĘPNE CZĘŚCI: %.1f" % GameState.captain.parts
_stock.text = "AMUNICJA: %d / RAKIETY: %d" % [_inventory.ammunition, _inventory.missile_ammunition]
_ammo.disabled = not _inventory.can_craft_ammunition()
_missile.disabled = not _inventory.can_craft_missile()