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) 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 = "Tlen %d · Temp. %d · Fauna %d pp" % [mini(100,2*GEAR.level(captain,"breathing")),mini(100,2*GEAR.level(captain,"suit")),mini(100,2*GEAR.level(captain,"sidearm"))]