61 lines
2.3 KiB
GDScript
61 lines
2.3 KiB
GDScript
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"
|