# TODO: Make this work again. class_name Health extends Node2D const TIME_VISIBLE := 1.0 const TIME_FADE := 1.5 @export var player : Player @export var segments := 6 @export var inner_radius := 14 @export var outer_radius := 24 @export var separation := 2.0 @onready var start_angle := (TAU / 4) - (TAU / segments / 2) var health : float var visibility_timer : float func _ready() -> void: visible = false func _process(delta: float) -> void: if not player: visible = false return if player.health.current >= 1.0: if !visible: return if visibility_timer > TIME_VISIBLE + TIME_FADE: visible = false return if visibility_timer > TIME_VISIBLE: modulate = Color(Color.WHITE, 1.0 - (visibility_timer - TIME_VISIBLE) / TIME_FADE) visibility_timer += delta else: visible = true modulate = Color.WHITE visibility_timer = 0.0 position = player.get_global_transform_with_canvas().origin; health = player.health.current; func _draw() -> void: for i in segments: var angle_1 := start_angle + TAU * ( i / float(segments)) var angle_3 := start_angle + TAU * ((i + 1) / float(segments)) var angle_2 := (angle_1 + angle_3) / 2 var sep_1 := separation * Vector2.from_angle(angle_1 + TAU / 4) var sep_2 := separation * Vector2.from_angle(angle_3 - TAU / 4) draw_colored_polygon([ inner_radius * Vector2.from_angle(angle_2) , inner_radius * Vector2.from_angle(angle_1) + sep_1, outer_radius * Vector2.from_angle(angle_1) + sep_1, outer_radius * Vector2.from_angle(angle_2) , outer_radius * Vector2.from_angle(angle_3) + sep_2, inner_radius * Vector2.from_angle(angle_3) + sep_2, ], Color(Color.BLACK, 0.4)) # antialiased = true for i in segments: var fullness := clampf((health * segments) - i, 0.0, 1.0) if fullness <= 0.1: return var angle_1 := start_angle + TAU * ( i / float(segments)) var angle_3 := start_angle + TAU * ((i + 1) / float(segments)) var angle_2 := (angle_1 + angle_3) / 2 var sep_1 := separation * Vector2.from_angle(angle_1 + TAU / 4) var sep_2 := separation * Vector2.from_angle(angle_3 - TAU / 4) var _inner_radius_2 = inner_radius + 1 var _outer_radius_2 = lerpf(inner_radius, outer_radius, fullness) - 1 draw_colored_polygon([ inner_radius * Vector2.from_angle(angle_2) , inner_radius * Vector2.from_angle(angle_1) + sep_1, outer_radius * Vector2.from_angle(angle_1) + sep_1, outer_radius * Vector2.from_angle(angle_2) , outer_radius * Vector2.from_angle(angle_3) + sep_2, inner_radius * Vector2.from_angle(angle_3) + sep_2, ], Color(Color.RED, 0.5)) # antialiased = true