2D multiplayer platformer using Godot Engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

87 lines
2.6 KiB

# 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