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)