~starkingdoms/starkingdoms

4aabb4e18d3924002e936b887887190d236744ca — ghostly_zsh 5 months ago bf1ffce
batch spawning particles
1 files changed, 18 insertions(+), 16 deletions(-)

M crates/unified/src/particle_editor/spawn.rs
M crates/unified/src/particle_editor/spawn.rs => crates/unified/src/particle_editor/spawn.rs +18 -16
@@ 19,23 19,25 @@ fn spawn_particles(
) {
    for (transform, effect, mut delay_timer) in particle_effects {
        delay_timer.0.tick(time.delta());
        let circle = CircleMesh(meshes.add(Circle::new(1.0)),
            materials.add(effect.color.sample(effect.color.clamp_time(0.0).unwrap()).unwrap()));
        if delay_timer.0.just_finished() {
            commands.spawn((
                RigidBody::Dynamic,
                Particle,
                transform.with_scale(Vec3::splat(effect.scale.sample(effect.scale.clamp_time(0.0).unwrap()).unwrap())),
                Mesh2d(circle.0.clone()),
                MeshMaterial2d(circle.1.clone()),
                Velocity {
                    linvel: effect.initial_linear_velocity.sample(&mut rand::rng()),
                    angvel: effect.initial_angular_velocity.sample(&mut rand::rng()),
                },
                LifetimeTimer(Timer::from_seconds(effect.lifetime_seconds.sample(&mut rand::rng()), TimerMode::Once)),
                circle,
                ParentEffect(effect.clone()),
            ));
            for _ in 0..effect.particles_in_batch.sample(&mut rand::rng()) {
                let circle = CircleMesh(meshes.add(Circle::new(1.0)),
                    materials.add(effect.color.sample(effect.color.clamp_time(0.0).unwrap()).unwrap()));
                commands.spawn((
                    RigidBody::Dynamic,
                    Particle,
                    transform.with_scale(Vec3::splat(effect.scale.sample(effect.scale.clamp_time(0.0).unwrap()).unwrap())),
                    Mesh2d(circle.0.clone()),
                    MeshMaterial2d(circle.1.clone()),
                    Velocity {
                        linvel: effect.initial_linear_velocity.sample(&mut rand::rng()),
                        angvel: effect.initial_angular_velocity.sample(&mut rand::rng()),
                    },
                    LifetimeTimer(Timer::from_seconds(effect.lifetime_seconds.sample(&mut rand::rng()), TimerMode::Once)),
                    circle,
                    ParentEffect(effect.clone()),
                ));
            }
            delay_timer.0.set_duration(Duration::from_secs_f32(effect.batch_spawn_delay_seconds.sample(&mut rand::rng())));
            delay_timer.0.reset();
        }