extends Control var _panel: PanelContainer var _label: Label var _toggle: Button var _open := false var _tween: Tween func _ready() -> void: mouse_filter = Control.MOUSE_FILTER_IGNORE set_anchors_and_offsets_preset(Control.PRESET_TOP_LEFT) _panel = PanelContainer.new() var style := StyleBoxFlat.new() style.bg_color = Color("0b1520f5") style.border_color = Color("a54e61") style.set_border_width_all(1) style.set_content_margin_all(12) _panel.add_theme_stylebox_override("panel", style) add_child(_panel) _label = Label.new() _label.add_theme_font_size_override("font_size", 12) _panel.add_child(_label) _toggle = Button.new() _toggle.text = "WRÓG ▾" preload("res://scripts/ui/hud_button_style.gd").apply(_toggle, Color("ff9aae")) add_child(_toggle) _toggle.pressed.connect(_toggle_drawer) _open = bool(GameState.hud_panel_state.get("enemy_open", false)) get_viewport().size_changed.connect(_layout) _layout() func _layout() -> void: position.x = (get_viewport_rect().size.x - 390.0) * 0.5 _panel.size = Vector2(390, 150) _panel.position.y = 56.0 if _open else -160.0 _toggle.position = Vector2(130, 12) _toggle.size = Vector2(130, 36) func _toggle_drawer() -> void: _open = not _open GameState.hud_panel_state["enemy_open"] = _open _toggle.text = "WRÓG ▴" if _open else "WRÓG ▾" if _tween != null: _tween.kill() _tween = create_tween() _tween.tween_property(_panel, "position:y", 56.0 if _open else -160.0, 0.25).set_trans(Tween.TRANS_CUBIC) func _process(_delta: float) -> void: var enemy: Node = null for candidate in get_tree().get_nodes_in_group("enemies"): if not candidate.is_queued_for_deletion() and (enemy == null or int(candidate.loot_tier) < int(enemy.loot_tier)): enemy = candidate var profile := DamageTypes.enemy_profile(GameState.system_level, GameState.system_seed) var kind := int(profile["kind"]) var names := ["Działko plazmowe", "Działko maszynowe", "Laser", "Rakiety", "Działko gamma"] _label.text = "WRÓG · UKŁAD %d\n%s · %s\n%s" % [GameState.system_level, names[kind], DamageTypes.NAMES[DamageTypes.for_weapon(kind)], DamageTypes.describe(profile["absorption"])] if enemy != null: _label.text += "\nDPS: %.1f (%s)\nTarcze: %.0f / %.0f · bez regeneracji" % [enemy.get_weapon_dps(), ["zwykły", "elita", "boss"][enemy.loot_tier], enemy.shields, enemy.max_shields] else: _label.text += "\nUkład oczyszczony"