49 lines
1.5 KiB
Plaintext
49 lines
1.5 KiB
Plaintext
func _spawn_cleanser_particles(pos: Vector2i) -> void:
|
|
"""Spawn bright cleansing particles when sticky is cleared."""
|
|
if not main_scene or not gridmap:
|
|
return
|
|
|
|
var world_pos = Vector3(
|
|
pos.x * gridmap.cell_size.x + gridmap.cell_size.x / 2.0,
|
|
0.5,
|
|
pos.y * gridmap.cell_size.z + gridmap.cell_size.z / 2.0
|
|
)
|
|
|
|
var particles = GPUParticles3D.new()
|
|
particles.emitting = true
|
|
particles.one_shot = true
|
|
particles.amount = 12
|
|
particles.lifetime = 0.6
|
|
particles.explosiveness = 0.9
|
|
|
|
var material = ParticleProcessMaterial.new()
|
|
material.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_SPHERE
|
|
material.emission_sphere_radius = 0.3
|
|
material.direction = Vector3(0, 1, 0)
|
|
material.spread = 180.0
|
|
material.initial_velocity_min = 3.0
|
|
material.initial_velocity_max = 5.0
|
|
material.gravity = Vector3(0, -5.0, 0)
|
|
material.scale_min = 0.05
|
|
material.scale_max = 0.15
|
|
|
|
var mesh = SphereMesh.new()
|
|
mesh.radius = 0.2
|
|
mesh.height = 0.4
|
|
var spatial_mat = StandardMaterial3D.new()
|
|
spatial_mat.albedo_color = Color(0.2, 1.0, 1.0) # Cyan/Blue for cleanser
|
|
spatial_mat.emission_enabled = true
|
|
spatial_mat.emission = Color(0.2, 1.0, 1.0)
|
|
spatial_mat.emission_energy_multiplier = 3.0
|
|
mesh.material = spatial_mat
|
|
particles.draw_pass_1 = mesh
|
|
|
|
particles.process_material = material
|
|
particles.position = world_pos
|
|
|
|
main_scene.add_child(particles)
|
|
|
|
await get_tree().create_timer(1.2).timeout
|
|
if particles and is_instance_valid(particles):
|
|
particles.queue_free()
|