extends PanelContainer @onready var player: CharacterBody2D = get_node("../../../PlayerShip") @onready var level_label: Label = $Contents/Header/Level @onready var xp_label: Label = $Contents/XPLabel @onready var xp_bar: ProgressBar = $Contents/XPBar @onready var credits_label: Label = $Contents/Wallet/Credits var _captain: CaptainProgress var _level_up_button: Button func _ready() -> void: _build_portrait() _captain = GameState.captain _captain.normalize_skill_ranks() _level_up_button = Button.new() _level_up_button.name = "LevelUpButton" _level_up_button.text = "Nowy poziom" _level_up_button.custom_minimum_size.y = 32 _level_up_button.focus_mode = Control.FOCUS_NONE preload("res://scripts/ui/hud_button_style.gd").apply(_level_up_button, Color("efb568")) $Contents.add_child(_level_up_button) _level_up_button.pressed.connect(func() -> void: get_node("../../CaptainSkills").call("open_management") ) _captain.changed.connect(_refresh) player.get_node("ShipInventory").connect("inventory_changed", _refresh) for label in [level_label, xp_label, credits_label]: label.add_theme_color_override("font_shadow_color", Color("030811")) label.add_theme_constant_override("shadow_offset_x", 1) label.add_theme_constant_override("shadow_offset_y", 1) _refresh() func _refresh() -> void: level_label.text = "POZ. %d" % _captain.level xp_label.text = "XP %d / %d" % [_captain.experience, _captain.get_xp_required()] xp_bar.max_value = _captain.get_xp_required() xp_bar.value = _captain.experience credits_label.text = "Kredyty: %d" % _captain.credits var available := _captain.learning_points > 0 if _level_up_button.visible != available: _level_up_button.visible = available reset_size.call_deferred() _level_up_button.tooltip_text = "Wybierz umiejętność · oczekujące awanse: %d" % _captain.learning_points func _build_portrait() -> void: custom_minimum_size = Vector2(244, 0) var style := StyleBoxFlat.new() style.bg_color = Color(0.025, 0.042, 0.064, 0.0) style.border_color = Color("37677900") style.set_border_width_all(1) style.set_corner_radius_all(8) style.set_content_margin_all(6) add_theme_stylebox_override("panel", style) var row := HBoxContainer.new() row.name = "PortraitRow" row.add_theme_constant_override("separation", 8) $Contents.add_child(row) $Contents.move_child(row, 1) var frame := PanelContainer.new() frame.name = "AvatarFrame" var portrait_style := style.duplicate() as StyleBoxFlat portrait_style.set_content_margin_all(2) portrait_style.border_color = Color("daa85d") portrait_style.bg_color = Color("0b1520") frame.add_theme_stylebox_override("panel", portrait_style) row.add_child(frame) var portrait := TextureRect.new() portrait.name = "CaptainAvatar" portrait.custom_minimum_size = Vector2(54, 54) portrait.expand_mode = TextureRect.EXPAND_IGNORE_SIZE portrait.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED portrait.mouse_filter = Control.MOUSE_FILTER_IGNORE if ResourceLoader.exists("res://assets/avatars/captain.png"): portrait.texture = load("res://assets/avatars/captain.png") frame.add_child(portrait) var info := VBoxContainer.new() info.size_flags_horizontal = Control.SIZE_EXPAND_FILL info.alignment = BoxContainer.ALIGNMENT_CENTER row.add_child(info) var designation := Label.new() designation.text = "DOWÓDCA STATKU" designation.add_theme_font_size_override("font_size", 9) designation.add_theme_color_override("font_color", Color("91dbea")) info.add_child(designation) xp_label.reparent(info, false) xp_bar.reparent(info, false) xp_bar.custom_minimum_size.y = 5