diff --git a/.cargo/audit.toml b/.cargo/audit.toml new file mode 100644 index 0000000..28eacc0 --- /dev/null +++ b/.cargo/audit.toml @@ -0,0 +1,10 @@ +[advisories] +# quick-xml is pulled transitively through bevy 0.15 -> winit 0.30 -> +# smithay-client-toolkit -> wayland-scanner. The latest compatible +# wayland-scanner line only reaches quick-xml 0.39.4, while these advisories +# require quick-xml >=0.41.0. Keep this narrow until the Bevy/winit migration +# in Dependabot #14 can move the Wayland stack past the constraint. +ignore = [ + "RUSTSEC-2026-0194", + "RUSTSEC-2026-0195", +] diff --git a/Cargo.lock b/Cargo.lock index 45b89c0..7cdc58e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -805,7 +805,7 @@ dependencies = [ "derive_more", "glam", "itertools", - "rand", + "rand 0.8.6", "rand_distr", "serde", "smallvec", @@ -1346,7 +1346,7 @@ dependencies = [ "cc", "cfg-if", "constant_time_eq", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -1501,6 +1501,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] + [[package]] name = "chrono" version = "0.4.45" @@ -1736,6 +1747,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -1766,9 +1786,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] @@ -1842,7 +1862,7 @@ dependencies = [ "bevy", "chrono", "dirs", - "rand", + "rand 0.10.2", "serde", "serde_json", "thiserror 2.0.18", @@ -2222,10 +2242,22 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", ] +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", +] + [[package]] name = "gilrs" version = "0.11.1" @@ -2278,7 +2310,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" dependencies = [ "bytemuck", - "rand", + "rand 0.8.6", "serde", ] @@ -3523,9 +3555,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.38.4" +version = "0.39.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", ] @@ -3545,6 +3577,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radsort" version = "0.1.1" @@ -3559,7 +3597,18 @@ checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] @@ -3569,7 +3618,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -3581,6 +3630,12 @@ dependencies = [ "getrandom 0.2.17", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "rand_distr" version = "0.4.3" @@ -3588,7 +3643,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand", + "rand 0.8.6", ] [[package]] @@ -4626,9 +4681,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" +checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", "quick-xml", diff --git a/Cargo.toml b/Cargo.toml index 79a44f1..5a13e0f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" chrono = { version = "0.4", features = ["serde"] } thiserror = "2" -rand = "0.8" +rand = "0.10" dirs = "6" [profile.dev] diff --git a/src/systems/critter_spawner.rs b/src/systems/critter_spawner.rs index d72870f..ad7a92b 100644 --- a/src/systems/critter_spawner.rs +++ b/src/systems/critter_spawner.rs @@ -2,7 +2,7 @@ use crate::components::{Critter, CritterSpecies}; use crate::events::CritterArrived; use crate::resources::BehaviorSignals; use bevy::prelude::*; -use rand::Rng; +use rand::{Rng, RngExt}; pub fn critter_spawner_system( mut commands: Commands, @@ -21,7 +21,7 @@ pub fn critter_spawner_system( .iter() .any(|c| c.species == CritterSpecies::Butterfly); if !has_butterfly && *spawn_timer > 5.0 { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let path = random_butterfly_path(&mut rng); commands.spawn(( @@ -47,8 +47,8 @@ pub fn critter_spawner_system( // Beetle: 5% chance per minute when active if behavior.is_active && *spawn_timer > 60.0 { - let mut rng = rand::thread_rng(); - if rng.gen::() < 0.05 { + let mut rng = rand::rng(); + if rng.random::() < 0.05 { let has_beetle = existing_critters .iter() .any(|c| c.species == CritterSpecies::Beetle); @@ -79,11 +79,11 @@ pub fn critter_spawner_system( } fn random_butterfly_path(rng: &mut impl Rng) -> [Vec2; 4] { - let enter_side = if rng.gen_bool(0.5) { -1.0 } else { 1.0 }; + let enter_side = if rng.random_bool(0.5) { -1.0 } else { 1.0 }; [ - Vec2::new(enter_side * 500.0, rng.gen_range(-100.0..200.0)), - Vec2::new(enter_side * 200.0, rng.gen_range(0.0..250.0)), - Vec2::new(-enter_side * 150.0, rng.gen_range(-50.0..200.0)), - Vec2::new(-enter_side * 500.0, rng.gen_range(-100.0..200.0)), + Vec2::new(enter_side * 500.0, rng.random_range(-100.0..200.0)), + Vec2::new(enter_side * 200.0, rng.random_range(0.0..250.0)), + Vec2::new(-enter_side * 150.0, rng.random_range(-50.0..200.0)), + Vec2::new(-enter_side * 500.0, rng.random_range(-100.0..200.0)), ] } diff --git a/src/systems/fog.rs b/src/systems/fog.rs index 33543f9..a02c20a 100644 --- a/src/systems/fog.rs +++ b/src/systems/fog.rs @@ -1,7 +1,7 @@ use crate::components::FogWisp; use crate::resources::{WeatherState, WeatherType}; use bevy::prelude::*; -use rand::Rng; +use rand::RngExt; #[derive(Resource)] pub struct FogAssets { @@ -34,20 +34,20 @@ pub fn fog_spawn_system( // Spawn wisps if we need more if current_count < target_count { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); commands.spawn(( Sprite { image: fog_assets.fog_wisp_handle.clone(), ..default() }, Transform::from_xyz( - rng.gen_range(-450.0..450.0), - rng.gen_range(-250.0..250.0), + rng.random_range(-450.0..450.0), + rng.random_range(-250.0..250.0), 50.0, ), FogWisp { - drift_speed: rng.gen_range(10.0..30.0), - alpha_phase: rng.gen_range(0.0..std::f32::consts::TAU), + drift_speed: rng.random_range(10.0..30.0), + alpha_phase: rng.random_range(0.0..std::f32::consts::TAU), }, )); } diff --git a/src/systems/rain.rs b/src/systems/rain.rs index 93282b9..cbaed15 100644 --- a/src/systems/rain.rs +++ b/src/systems/rain.rs @@ -2,7 +2,7 @@ use crate::components::RainDrop; use crate::resources::WeatherState; use crate::resources::WeatherType; use bevy::prelude::*; -use rand::Rng; +use rand::RngExt; const RAIN_SPAWN_RATE: f32 = 15.0; // drops per second @@ -48,18 +48,21 @@ pub fn rain_spawn_system( rain_assets.spawn_timer.tick(time.delta()); if rain_assets.spawn_timer.just_finished() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); // Spawn rain drops based on multiplier - if rng.gen::() < spawn_multiplier { + if rng.random::() < spawn_multiplier { commands.spawn(( Sprite { image: rain_assets.raindrop_handle.clone(), ..default() }, - Transform::from_xyz(rng.gen_range(-420.0..420.0), 320.0, 50.0), + Transform::from_xyz(rng.random_range(-420.0..420.0), 320.0, 50.0), RainDrop { - velocity: Vec2::new(rng.gen_range(-10.0..10.0), rng.gen_range(-300.0..-200.0)), + velocity: Vec2::new( + rng.random_range(-10.0..10.0), + rng.random_range(-300.0..-200.0), + ), lifetime: 3.0, }, )); diff --git a/src/systems/wind.rs b/src/systems/wind.rs index 6d5014e..f942756 100644 --- a/src/systems/wind.rs +++ b/src/systems/wind.rs @@ -1,7 +1,7 @@ use crate::components::WindLeaf; use crate::resources::{WeatherState, WeatherType}; use bevy::prelude::*; -use rand::Rng; +use rand::RngExt; #[derive(Resource)] pub struct WindAssets { @@ -30,10 +30,10 @@ pub fn wind_spawn_system( wind_assets.spawn_timer.tick(time.delta()); if wind_assets.spawn_timer.just_finished() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); // Random spawn chance (3-8 per second) - if rng.gen::() < 0.5 { + if rng.random::() < 0.5 { commands.spawn(( Sprite { image: wind_assets.leaf_handle.clone(), @@ -41,12 +41,15 @@ pub fn wind_spawn_system( }, Transform::from_xyz( 450.0, // Start from right edge - rng.gen_range(-200.0..200.0), + rng.random_range(-200.0..200.0), 50.0, ), WindLeaf { - velocity: Vec2::new(rng.gen_range(-200.0..-100.0), rng.gen_range(-20.0..20.0)), - rotation_speed: rng.gen_range(-3.0..3.0), + velocity: Vec2::new( + rng.random_range(-200.0..-100.0), + rng.random_range(-20.0..20.0), + ), + rotation_speed: rng.random_range(-3.0..3.0), lifetime: 8.0, }, ));