Randoloot/scripts/ui/captain_equipment_panel.gd
2026-10-27 22:20:01 +01:00

79 lines
3.0 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends PanelContainer
const GEAR := preload("res://scripts/planets/captain_equipment.gd")
const MENU := preload("res://scripts/planets/freighter_menu.gd")
var _wardrobe: PanelContainer
var _gear_signature := ""
var _protection: Label
func _ready() -> void:
# Retain this controller node for HUD integrations, without a persistent gear strip.
hide()
_create_wardrobe()
GameState.captain.changed.connect(_refresh_wardrobe)
get_viewport().size_changed.connect(_fit_window)
_refresh_wardrobe()
func _create_wardrobe() -> void:
_wardrobe = PanelContainer.new()
_wardrobe.name = "CaptainGearInventory"
MENU.style(_wardrobe,6)
_wardrobe.size = Vector2(244,324)
get_parent().add_child(_wardrobe)
var contents := VBoxContainer.new()
contents.add_theme_constant_override("separation",4)
_wardrobe.add_child(contents)
var header := MENU.row(contents)
var title := MENU.label(header,"EKWIPUNEK KAPITANA",13,MENU.GOLD)
title.size_flags_horizontal = Control.SIZE_EXPAND_FILL
MENU.button(header,"×",close).custom_minimum_size.x = 32
var body := MENU.row(contents)
var doll := Control.new()
doll.name = "PaperDoll"
doll.set_script(preload("res://scripts/ui/captain_paper_doll.gd"))
doll.custom_minimum_size = Vector2(228,252)
body.add_child(doll)
_protection = MENU.label(contents,"",10,MENU.MUTED)
_protection.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
get_parent().get_node("FloatingWindows").register_window(_wardrobe,_wardrobe,header)
_wardrobe.minimum_size_changed.connect(_fit_window.call_deferred)
_wardrobe.hide()
func _toggle_wardrobe() -> void:
if _wardrobe.visible:
close()
return
_wardrobe.show()
if not _wardrobe.has_meta("floating_window_dragged"):
_fit_window()
_fit_window.call_deferred()
get_parent().get_node("FloatingWindows").focus_window(_wardrobe)
func close() -> void:
_wardrobe.hide()
func _fit_window() -> void:
if not is_instance_valid(_wardrobe): return
var view := get_viewport_rect().size
_wardrobe.size = Vector2(244,324)
var captain_panel := get_parent().get_node("CaptainPanel") as Control
var anchor := captain_panel.position+Vector2(0,captain_panel.size.y+8)
var factor := minf(1.0,minf((view.x-16)/_wardrobe.size.x,(view.y-anchor.y-12)/_wardrobe.size.y))
_wardrobe.scale = Vector2.ONE*maxf(0.35,factor)
if not _wardrobe.has_meta("floating_window_dragged"):
_wardrobe.position = anchor
else:
get_parent().get_node("FloatingWindows").clamp_window(_wardrobe)
func _unhandled_key_input(event: InputEvent) -> void:
if _wardrobe.visible and event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE:
close()
get_viewport().set_input_as_handled()
func _refresh_wardrobe() -> void:
var captain := GameState.captain
var signature := str(captain.gear_items)+str(captain.gear_slots)
if signature == _gear_signature: return
_gear_signature = signature
_protection.text = "Dopasuj poziom sprzętu do planety."
_protection.tooltip_text = "Dopasuj poziom wyposażenia do planety, aby odzyskać więcej łupu i ograniczyć uszkodzenia lądownika."