Randoloot/scripts/game/hull_collapse_effect.gd
2026-10-25 16:12:08 +01:00

41 lines
1.4 KiB
GDScript

extends Node2D
var _texture: Texture2D
var _visual_size := 56.0
var _angle := 0.0
var _time := 0.0
var _pieces: Array[Dictionary] = []
func configure(texture: Texture2D, visual_size: float, angle: float) -> void:
_texture = texture
_visual_size = visual_size
_angle = angle
var grid := 3
var cell := Vector2(texture.get_size())/grid
for y in grid:
for x in grid:
var offset := Vector2(x-1,y-1)*visual_size/3.0
var direction := offset.normalized() if offset.length()>0 else Vector2.RIGHT.rotated(randf()*TAU)
_pieces.append({"region":Rect2(Vector2(x,y)*cell,cell),"offset":offset.rotated(angle),"velocity":direction.rotated(angle)*randf_range(75,180),"spin":randf_range(-5,5)})
func _ready() -> void:
z_index = 35
light_mask = 4
func _process(delta: float) -> void:
_time += delta
if _time >= 1.1: queue_free()
queue_redraw()
func _draw() -> void:
if _texture == null: return
var fade := clampf(1.0-_time/1.1,0,1)
for ring in 3:
draw_arc(Vector2.ZERO,_visual_size*0.3+_time*(95+ring*45),0,TAU,48,Color(1,0.45+ring*0.15,0.1,fade*0.4),2,true)
for piece in _pieces:
var center: Vector2 = piece.offset+piece.velocity*_time
draw_set_transform(center,_angle+piece.spin*_time)
var extent := Vector2.ONE*_visual_size/3.0
draw_texture_rect_region(_texture,Rect2(-extent*0.5,extent),piece.region,Color(1.0,0.8,0.6,fade))
draw_line(Vector2.ZERO,Vector2(-8,0),Color(1,0.6,0.12,fade),2,true)
draw_set_transform(Vector2.ZERO)