Randoloot/scripts/ui/combat_feedback.gd
2026-10-17 14:28:20 +02:00

34 lines
1.3 KiB
GDScript

extends Control
const FONT := preload("res://assets/fonts/font2.ttf")
const LOW_HULL_RATIO := 0.25
var player: CharacterBody2D
var _elapsed := 0.0
func _ready() -> void:
mouse_filter = Control.MOUSE_FILTER_IGNORE
set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
func _process(delta: float) -> void:
_elapsed += delta
queue_redraw()
func _draw() -> void:
if not is_instance_valid(player) or bool(player.get("_is_destroyed")):
return
var hull := float(player.get("hull"))
var max_hull := maxf(1.0, float(player.get("max_hull")))
if hull / max_hull > LOW_HULL_RATIO or bool(player.get("is_docked")):
return
var pulse := 0.55 + 0.25 * (sin(_elapsed * TAU) + 1.0) * 0.5
var warning_color := Color(1.0, 0.32, 0.26, pulse)
draw_rect(Rect2(Vector2(3, 3), size - Vector2(6, 6)), warning_color, false, 3)
var warning := "NISKI KADŁUB — %d%%" % roundi(hull / max_hull * 100)
# Keep the warning below the navigation buttons, including after a resize.
var navigation := get_parent().get_node_or_null("TopNavigation") as Control
var warning_top := 104.0
if is_instance_valid(navigation):
warning_top = navigation.get_global_rect().end.y - global_position.y + 12.0
var baseline := warning_top + FONT.get_ascent(18)
draw_string(FONT, Vector2(0, baseline), warning, HORIZONTAL_ALIGNMENT_CENTER, size.x, 18, warning_color)