class_name AsteroidExplosionVFX extends ExplosionVFXBase # Tumbling rock-chunk debris, distinct from the energy-ship light-burst # style - asteroids are matter, not light. const COLOR: Color = Color(0.65, 0.5, 0.35) static func spawn(parent: Node, world_position: Vector2) -> void: var vfx: AsteroidExplosionVFX = AsteroidExplosionVFX.new() vfx.position = world_position parent.add_child(vfx) func _random_particle_size() -> float: return randf_range(3.0, 7.0) # Debris tumbles independently of its flight path, unlike the light-burst # streaks - each chunk needs its own evolving rotation, so the base class # must keep writing visual.rotation every frame instead of leaving it fixed. func _particle_spins() -> bool: return true func _configure_particle(visual: ExplosionParticle, p: Dictionary) -> void: var s: float = p["size"] # Unrotated local points - the child node's own `rotation` (driven by # the base class from p["rot"]) supplies the tumble that used to be # baked into a fresh pt.rotated(p["rot"]) call every frame. var local_pts: PackedVector2Array = PackedVector2Array([ Vector2(-s, -s * 0.6), Vector2(s * 0.7, -s * 0.5), Vector2(s, s * 0.5), Vector2(-s * 0.6, s), ]) visual.draw_callable = func(item: CanvasItem) -> void: item.draw_colored_polygon(local_pts, COLOR)