diff --git a/src/game.rs b/src/game.rs
index 3c7c8fd..c98f48e 100644
--- a/src/game.rs
+++ b/src/game.rs
@@ -290,8 +290,7 @@ fn collision_event_system(
.clamp(Vec4::ZERO, Vec4::ONE);
// If color approximately white
- if app_state.current() == &AppState::Game
- && new_color.min_element() >= 0.9
+ if app_state.current() == &AppState::Game && new_color.min_element() >= 0.9
{
app_state.replace(AppState::Win).ok();
}
diff --git a/src/particle_effect.rs b/src/particle_effect.rs
index b711548..26e275a 100644
--- a/src/particle_effect.rs
+++ b/src/particle_effect.rs
@@ -1,5 +1,5 @@
use bevy::{prelude::*, sprite::Mesh2dHandle};
-use rand::Rng;
+use rand::{rngs::ThreadRng, Rng};
use rand_distr::{Distribution, UnitCircle};
#[cfg(not(target_arch = "wasm32"))]
@@ -68,15 +68,20 @@ pub struct ParticleComponent {
}
impl ParticleComponent {
- pub fn new() -> Self {
+ pub fn new(rng: &mut ThreadRng) -> Self {
let mut particle_component: Self = Self::default();
- particle_component.randomize_velocity(MIN_VELOCITY, MAX_VELOCITY);
+ particle_component.randomize_velocity(rng, MIN_VELOCITY, MAX_VELOCITY);
particle_component
}
- pub fn randomize_velocity(&mut self, min_velocity: f32, max_velocity: f32) {
- let random_direction: [f32; 2] = UnitCircle.sample(&mut rand::thread_rng());
- let random_magnitude: f32 = rand::thread_rng().gen_range(min_velocity..max_velocity);
+ pub fn randomize_velocity(
+ &mut self,
+ rng: &mut ThreadRng,
+ min_velocity: f32,
+ max_velocity: f32,
+ ) {
+ let random_direction: [f32; 2] = UnitCircle.sample(rng);
+ let random_magnitude: f32 = rng.gen_range(min_velocity..max_velocity);
self.velocity = Vec3::new(random_direction[0], random_direction[1], 0.0) * random_magnitude;
}
}
@@ -87,6 +92,8 @@ fn particle_effect_startup(
particle_mesh: Res<ParticleMesh>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
+ let mut rng = rand::thread_rng();
+
for _p in 0..POOL_COUNT {
let color_mesh = ColorMesh2dBundle {
mesh: particle_mesh.square.clone(),
@@ -96,7 +103,7 @@ fn particle_effect_startup(
commands
.spawn_bundle(color_mesh)
- .insert(ParticleComponent::new());
+ .insert(ParticleComponent::new(&mut rng));
}
}
@@ -110,6 +117,8 @@ fn particle_effect_system(
mut particle_effect: ResMut<ParticleEffectResource>,
time: Res<Time>,
) {
+ let mut rng = rand::thread_rng();
+
let delta_seconds: f32 = f32::max(0.001, time.delta_seconds());
let delta_position: Vec3 = particle_effect.translation - particle_effect.prev_translation;
// let overall_velocity: Vec3 = delta_position / delta_seconds;
@@ -124,7 +133,7 @@ fn particle_effect_system(
.distance_squared(particle_effect.translation);
if squared_distance > particle_effect.radius_squared {
transform.translation = particle_effect.translation;
- particle_component.randomize_velocity(MIN_VELOCITY, MAX_VELOCITY);
+ particle_component.randomize_velocity(&mut rng, MIN_VELOCITY, MAX_VELOCITY);
}
if let Some(material) = materials.get_mut(color_material) {