diff --git a/Cargo.toml b/Cargo.toml index 3b6ee1c..22b0721 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,5 +37,5 @@ log = { version = "*", features = [ "max_level_debug", "release_max_level_warn", ] } -rand = { version = "0.9.1", default-features = false, features = ["std"] } +rand = { version = "0.9.1", default-features = false, features = ["std", "thread_rng"] } wyrand = "0.3.2" diff --git a/src/game/mod.rs b/src/game/mod.rs index 370d386..cd239ce 100644 --- a/src/game/mod.rs +++ b/src/game/mod.rs @@ -1,4 +1,5 @@ -pub mod objects; +mod objects; +mod rng; pub mod runtime; pub mod seed; pub mod setup; diff --git a/src/game/rng.rs b/src/game/rng.rs new file mode 100644 index 0000000..a9c40ad --- /dev/null +++ b/src/game/rng.rs @@ -0,0 +1,7 @@ +use rand::random; +use wyrand::WyRand; + +/// Initialize a `WyRand` using `rand`'s thread-local rng +pub fn thread_rng() -> WyRand { + WyRand::new(random()) +} diff --git a/src/game/setup.rs b/src/game/setup.rs index f1f0770..2551b06 100644 --- a/src/game/setup.rs +++ b/src/game/setup.rs @@ -9,10 +9,12 @@ use bevy::{ prelude::*, }; use bevy_rand::prelude::{GlobalEntropy, WyRand}; -use rand::Rng; -use wyrand::WyRand as LocalRng; +use rand::Rng as _; -use super::objects::{Ball, Player, Wall}; +use super::{ + objects::{Ball, Player, Wall}, + rng::thread_rng, +}; const BALL_COUNT: u8 = 32; const BALL_SIZES: Range = 10.0..25.0; @@ -57,7 +59,7 @@ pub fn setup_balls( mut meshes: ResMut>, region: Res, ) { - let mut random = LocalRng::new(Default::default()); + let mut random = thread_rng(); for _ in 0..BALL_COUNT { let circle = Circle::new(random.random_range(BALL_SIZES)); commands.spawn(( @@ -66,12 +68,8 @@ pub fn setup_balls( Mesh2d(meshes.add(circle)), MeshMaterial2d(materials.add(Color::from(RED_400))), Transform::from_xyz( - random.random_range( - (-region.0 / 2.0 + circle.radius)..(region.0 / 2.0 - circle.radius), - ), - random.random_range( - (-region.1 / 2.0 + circle.radius)..(region.1 / 2.0 - circle.radius), - ), + random.random::() * (region.0 - 2.0 * circle.radius) + circle.radius, + random.random::() * (region.1 - 2.0 * circle.radius) + circle.radius, 0.0, ), ));