extends EffectBase class_name Particle @export var is_billboard: bool var sub_particle_list: Array[Particle] = [] var particle_list: Array[GPUParticles3D] = [] var speed_scale_list: Array[float] = [] var decal_list: Array[ParticleDecal] = [] var sub_emitter_list: Array[ParticleSubEmitter] = [] func on_ready(): for child in get_children(): if child is Particle: sub_particle_list.append(child) elif child is GPUParticles3D: var particle: GPUParticles3D = child as GPUParticles3D particle_list.append(particle) speed_scale_list.append(particle.speed_scale) particle.restart() elif child is ParticleDecal: child.on_ready() decal_list.append(child) elif child is ParticleSubEmitter: sub_emitter_list.append(child) else: continue if child.lifetime > lifetime_now: lifetime_now = child.lifetime for particle: GPUParticles3D in particle_list: if particle.lifetime > lifetime_now: lifetime_now = particle.lifetime func on_process(delta: float): for decal: ParticleDecal in decal_list: decal.on_process(delta) func on_set_pause(is_pause_set: bool): for i in range(len(particle_list)): var particle: GPUParticles3D = particle_list[i] var speed_scale: float = speed_scale_list[i] particle.speed_scale = 0 if is_pause else speed_scale for sub_particle: Particle in sub_particle_list: sub_particle.set_pause(is_pause_set)