79 lines
3.0 KiB
GDScript
79 lines
3.0 KiB
GDScript
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."
|