diff --git a/Cargo.lock b/Cargo.lock index 9b7ee09..91072a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -315,6 +315,7 @@ dependencies = [ "bevy", "bevy_bae", "bevy_mod_props", + "fake", "rand", ] @@ -2115,6 +2116,12 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "deunicode" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04" + [[package]] name = "dispatch" version = "0.2.0" @@ -2270,6 +2277,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "fake" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b0902eb36fbab51c14eda1c186bda119fcff91e5e4e7fc2dd2077298197ce8" +dependencies = [ + "deunicode", + "either", + "rand", +] + [[package]] name = "fastrand" version = "2.3.0" diff --git a/Cargo.toml b/Cargo.toml index 5fce149..1406a19 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ bevy = { version = "0.17.2", features = ["experimental_bevy_feathers"] } bevy_bae = { path = "../bevy_bae"} rand = "0.9.2" bevy_mod_props = { version = "0.1", git = "https://github.com/NthTensor/trill" } +fake = "4.4.0" [profile.dev] opt-level = 1 diff --git a/assets/arena.png b/assets/arena.png new file mode 100644 index 0000000000000000000000000000000000000000..3eaa93621c806071eb1691dd0d0cf21a06e74c37 GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE2sU=QVGVbQRu3LIyc82zrtN$GSF{rWbI=6M^ z!TycCw&ya%BC4O=GyZO>zu2ok{xx~Jz~+W^M;iT(H#|`|p4J>&(7dGY*2@iRJDyqH`+2^Vdri~C z7*^%g>Z~>ThQCa>o!f70thD>^QN>Z)+2MFvvkB)T?<8@(1Y^#F&sc65DIeLlHC1?v zhKK#S=rc??A+r_)$z2d}ie1UU$jZ1XR5*IUrh=ucH^KzPq|R*1?=6;i%eQ@Q%a&DP z-VMBxjZ@4owZ=61C2Zx4d}eZO9s3WbBYXj`CY&_66{h%V+o8}CDU2~Mm+fYfUt{u= z+q7iL8n5PbG~htQMU2ZtacScx3g} zyH6rAbPsEI%$Rr8oN>R7W0yE*)zY}ERgX&|KNX23Y-@{LwcsSTuY+aS!lI3LpG0`g zTAi|_#88o6@?^E=9$u@nmm-)fLQ-OO8?APlx^d~XP1EkPg~rZQ6=K`FaVop%|HYj@ axHr_^lCEY+Udq70z~JfX=d#Wzp$Pz0`J%4? literal 0 HcmV?d00001 diff --git a/src/berries.rs b/src/berries.rs index 328d8f8..b1367ea 100644 --- a/src/berries.rs +++ b/src/berries.rs @@ -1,5 +1,6 @@ use bevy::prelude::*; -use rand::Rng; + +use crate::sample_arena; #[derive(Component)] pub struct Berry; @@ -16,9 +17,7 @@ pub fn spawn_berries( let new = commands .spawn(( Berry, - Transform::from_translation( - (rand::rng().random::() - Vec2::splat(0.5)).extend(0.0) * 1000.0, - ), + Transform::from_translation(sample_arena(&mut rand::rng()).extend(0.0)), Sprite::from_image(asset_server.load("berry.png")), )) .id(); diff --git a/src/leaderbord.rs b/src/leaderbord.rs index 3ee94b6..4daaf82 100644 --- a/src/leaderbord.rs +++ b/src/leaderbord.rs @@ -57,19 +57,16 @@ pub fn update_leaderboard( board: Single<&Children, With>, mut lowest: Single<&mut Text, With>, mut texts: Query<&mut Text, Without>, - ghosts: Query<(Entity, &BerriesEaten)>, + ghosts: Query<(&Name, &BerriesEaten)>, ) { ghosts .iter() - .sort_by_key::<(Entity, &BerriesEaten), usize>(|(_, e)| e.0) + .sort_by_key::<(&Name, &BerriesEaten), usize>(|(_, e)| e.0) .rev() .zip(board.iter()) .for_each(|((ghost, eaten), text)| { - texts.get_mut(text).unwrap().0 = format!( - "Ghost {:>5} has eaten {} berries!", - ghost.to_string(), - eaten.0 - ); + texts.get_mut(text).unwrap().0 = + format!("{:<10} ate {} berries!", ghost.to_string(), eaten.0); }); let low = ghosts @@ -78,9 +75,5 @@ pub fn update_leaderboard( .next() .unwrap(); - lowest.0 = format!( - "Ghost {:>5} has eaten {} berries!", - low.0.to_string(), - low.1.0 - ); + lowest.0 = format!("{:<10} ate {} berries!", low.0.to_string(), low.1.0); } diff --git a/src/main.rs b/src/main.rs index df92a77..359db01 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,14 @@ #![allow(clippy::type_complexity)] +use std::f32::consts::TAU; + use bevy::{ diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}, + image::ImageSamplerDescriptor, prelude::*, }; use bevy_bae::prelude::*; +use fake::{Fake, locales::EN}; use rand::Rng; use crate::berries::{Berry, NewBerry}; @@ -13,11 +17,19 @@ mod berries; mod leaderbord; const SPEED: f32 = 100.0; +const RANGE: f32 = 450.0; + +pub fn sample_arena(rng: &mut impl Rng) -> Vec2 { + let r: f32 = rng.random::() * TAU; + Vec2::new(r.sin(), r.cos()) * (rng.random::() * RANGE) +} fn main() { App::new() .add_plugins(( - DefaultPlugins, + DefaultPlugins.build().set(ImagePlugin { + default_sampler: ImageSamplerDescriptor::nearest(), + }), BaePlugin::default(), LogDiagnosticsPlugin::default(), FrameTimeDiagnosticsPlugin::default(), @@ -44,10 +56,17 @@ fn main() { fn setup(mut commands: Commands, asset_server: Res) { commands.spawn(Camera2d); let mut rng = rand::rng(); + + commands.spawn(( + Sprite::from_image(asset_server.load("arena.png")), + Transform::from_scale(Vec2::splat(18.0).extend(0.0)), + )); + for _ in 1..100 { commands.spawn(( Plan::new(), BerriesEaten(0), + Name::new(fake::faker::name::raw::FirstName(EN).fake::()), Sprite::from_image(asset_server.load("collector.png")), Sequence, tasks!( @@ -55,9 +74,7 @@ fn setup(mut commands: Commands, asset_server: Res) { Operator::new(go_to_berry), Operator::new(collect_berry) ), - Transform::from_translation( - ((rng.random::() - Vec2::splat(0.5)) * 1000.0).extend(0.1), - ), + Transform::from_translation(sample_arena(&mut rng).extend(0.1)), )); } }