37 lines
1.2 KiB
GDScript
37 lines
1.2 KiB
GDScript
extends Node2D
|
|
|
|
var _age := 0.0
|
|
const DURATION := 0.065
|
|
|
|
func _ready() -> void:
|
|
z_index = 25
|
|
|
|
func _process(delta: float) -> void:
|
|
_age += delta
|
|
if _age >= DURATION:
|
|
queue_free()
|
|
else:
|
|
queue_redraw()
|
|
|
|
func _draw() -> void:
|
|
var fade := clampf(1.0 - _age / DURATION, 0.0, 1.0)
|
|
var length_scale := 0.45 + fade * 0.55
|
|
# Compact flame lobes instead of thin crossing lines that flicker at subpixels.
|
|
draw_set_transform(Vector2.ZERO, 0.0, Vector2(length_scale, 0.65 + fade * 0.35))
|
|
for index in range(4, 0, -1):
|
|
draw_circle(Vector2(4.0, 0.0), float(index) * 2.4, Color(1.0, 0.32, 0.035, 0.025 * fade), true, -1, true)
|
|
var flame := PackedVector2Array([
|
|
Vector2(-1, -2), Vector2(3, -4), Vector2(7, -2.5),
|
|
Vector2(10, -3.5), Vector2(8.5, -1), Vector2(16, 0),
|
|
Vector2(9, 1.6), Vector2(10.5, 3), Vector2(6, 2.5),
|
|
Vector2(3, 4), Vector2(-1, 2),
|
|
])
|
|
draw_colored_polygon(flame, Color(1.0, 0.35, 0.045, fade * 0.85))
|
|
draw_polyline(flame, Color(1.0, 0.5, 0.07, fade * 0.35), 1.0, true)
|
|
draw_colored_polygon(PackedVector2Array([
|
|
Vector2(0, -1.5), Vector2(4, -2), Vector2(11, 0),
|
|
Vector2(4, 2), Vector2(0, 1.5),
|
|
]), Color(1.0, 0.78, 0.22, fade))
|
|
draw_line(Vector2.ZERO, Vector2(6, 0), Color(1.0, 0.97, 0.76, fade), 2.2, true)
|
|
draw_set_transform(Vector2.ZERO)
|