74 lines
2.7 KiB
GDScript
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()
|