Randoloot/scripts/game/muzzle_flash.gd

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)