From b7780b8862a88956b6f294ea0a4b1f5071800daa Mon Sep 17 00:00:00 2001 From: Michael Bradley Date: Sun, 18 May 2025 23:12:00 -0400 Subject: [PATCH] Extract Seed and AppSettings to utils --- src/lib.rs | 40 ++++++--------------------------------- src/main.rs | 2 +- src/utils/app_settings.rs | 10 ++++++++++ src/utils/mod.rs | 4 ++++ src/utils/seed.rs | 22 +++++++++++++++++++++ 5 files changed, 43 insertions(+), 35 deletions(-) create mode 100644 src/utils/app_settings.rs create mode 100644 src/utils/mod.rs create mode 100644 src/utils/seed.rs diff --git a/src/lib.rs b/src/lib.rs index 064a8fe..4912513 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,8 +1,4 @@ -use std::{ - f32::consts::PI, - hash::{DefaultHasher, Hash, Hasher}, - ops::Range, -}; +use std::{f32::consts::PI, ops::Range}; use avian2d::{math::Vector, prelude::*}; use bevy::{ @@ -14,40 +10,17 @@ use bevy::{ prelude::*, }; use bevy_rand::prelude::{EntropyPlugin, GlobalEntropy, WyRand}; -use clap::Parser; use rand::Rng; use wyrand::WyRand as LocalRng; -#[derive(Parser)] -#[command(version, about)] -pub struct AppSettings { - #[arg(short, long, default_value = "")] - seed: String, -} +pub mod utils; + +use utils::AppSettings; const BALL_COUNT: u8 = 32; const BALL_SIZES: Range = 10.0..25.0; const DIMENSION_SIZES: Range = 500.0..2000.0; -#[derive(Clone, Resource)] -struct Seed(u64); - -impl From for Seed { - fn from(value: String) -> Self { - Self(value.parse::().unwrap_or_else(|_| { - let mut state = DefaultHasher::new(); - value.hash(&mut state); - state.finish() - })) - } -} - -impl From for [u8; 8] { - fn from(value: Seed) -> Self { - value.0.to_le_bytes() - } -} - #[derive(Resource)] struct PlayableArea(f32, f32); @@ -55,10 +28,9 @@ struct PlayableArea(f32, f32); struct PlayerSize(f32); pub fn run_app(settings: AppSettings) -> AppExit { - let seed = Seed::from(settings.seed); App::new() .insert_resource(Gravity(Vector::ZERO)) - .insert_resource(seed.clone()) + .insert_resource(settings.seed.clone()) .add_plugins(( DefaultPlugins.set(WindowPlugin { primary_window: Window { @@ -70,7 +42,7 @@ pub fn run_app(settings: AppSettings) -> AppExit { ..default() }), PhysicsPlugins::default().with_length_unit(50.0), - EntropyPlugin::::with_seed(seed.into()), + EntropyPlugin::::with_seed(settings.seed.into()), )) .add_systems( Startup, diff --git a/src/main.rs b/src/main.rs index 372c5cb..70b916a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ use bevy::prelude::AppExit; use clap::Parser; -use distributed_physics_test::{AppSettings, run_app}; +use distributed_physics_test::{run_app, utils::AppSettings}; fn main() -> AppExit { run_app(AppSettings::parse()) diff --git a/src/utils/app_settings.rs b/src/utils/app_settings.rs new file mode 100644 index 0000000..5d71cba --- /dev/null +++ b/src/utils/app_settings.rs @@ -0,0 +1,10 @@ +use clap::Parser; + +use super::Seed; + +#[derive(Parser)] +#[command(version, about)] +pub struct AppSettings { + #[arg(short, long, default_value = "")] + pub seed: Seed, +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs new file mode 100644 index 0000000..2a91401 --- /dev/null +++ b/src/utils/mod.rs @@ -0,0 +1,4 @@ +mod seed; +pub use seed::Seed; +mod app_settings; +pub use app_settings::AppSettings; diff --git a/src/utils/seed.rs b/src/utils/seed.rs new file mode 100644 index 0000000..1467ee9 --- /dev/null +++ b/src/utils/seed.rs @@ -0,0 +1,22 @@ +use std::hash::{DefaultHasher, Hash, Hasher}; + +use bevy::prelude::*; + +#[derive(Clone, Resource)] +pub struct Seed(u64); + +impl From for Seed { + fn from(value: String) -> Self { + Self(value.parse::().unwrap_or_else(|_| { + let mut state = DefaultHasher::new(); + value.hash(&mut state); + state.finish() + })) + } +} + +impl From for [u8; 8] { + fn from(value: Seed) -> Self { + value.0.to_le_bytes() + } +}