@@ 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();
}