diff --git a/.vscode/settings.json b/.vscode/settings.json index 0091863..fe117a2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,6 +9,7 @@ "codegen", "despawn", "Despawns", + "lerp", "recip", "respawns", "timestep", diff --git a/src/main.rs b/src/main.rs index 1397df6..c2b5395 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,8 +29,9 @@ fn main() -> AppExit { run_app(AppSettings::parse()) } +const BALL_COUNT: u8 = 32; const BALL_SIZES: Range = 10.0..25.0; -const DIMENSION_SIZES: Range = 250.0..1000.0; +const DIMENSION_SIZES: Range = 500.0..2000.0; #[derive(Clone, Resource)] struct Seed(u64); @@ -70,20 +71,29 @@ fn run_app(settings: AppSettings) -> AppExit { .add_systems( Startup, ( - setup_ui, setup_pseudo_random, - (setup_player, setup_walls, setup_balls).after(setup_pseudo_random), + setup_ui, + (setup_player, setup_balls, setup_walls).after(setup_pseudo_random), ), ) .add_systems( Update, (move_player, quit.run_if(input_pressed(KeyCode::KeyQ))), ) + .add_systems(PostUpdate, move_camera) .insert_resource(Gravity(Vector::ZERO)) .insert_resource(seed) .run() } +fn setup_pseudo_random(mut commands: Commands, mut rng: GlobalEntropy) { + commands.insert_resource(PlayerSize(rng.random_range(BALL_SIZES))); + commands.insert_resource(PlayableArea( + rng.random_range(DIMENSION_SIZES), + rng.random_range(DIMENSION_SIZES), + )); +} + fn setup_ui(mut commands: Commands) { commands.spawn((Name::new("Camera"), Camera2d, IsDefaultUiCamera)); } @@ -96,33 +106,6 @@ struct GameObject; #[require(GameObject, RigidBody = RigidBody::Dynamic)] struct Ball; -fn setup_balls( - mut commands: Commands, - mut materials: ResMut>, - mut meshes: ResMut>, - region: Res, -) { - let mut random = LocalRng::new(Default::default()); - for _ in 0..50 { - let circle = Circle::new(random.random_range(BALL_SIZES)); - commands.spawn(( - Ball, - Collider::from(circle), - 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), - ), - 0.0, - ), - )); - } -} - #[derive(Component, Default)] #[require(Ball)] struct Player; @@ -142,12 +125,31 @@ fn setup_player( )); } -fn setup_pseudo_random(mut commands: Commands, mut rng: GlobalEntropy) { - commands.insert_resource(PlayerSize(rng.random_range(BALL_SIZES))); - commands.insert_resource(PlayableArea( - rng.random_range(DIMENSION_SIZES), - rng.random_range(DIMENSION_SIZES), - )); +fn setup_balls( + mut commands: Commands, + mut materials: ResMut>, + mut meshes: ResMut>, + region: Res, +) { + let mut random = LocalRng::new(Default::default()); + for _ in 0..BALL_COUNT { + let circle = Circle::new(random.random_range(BALL_SIZES)); + commands.spawn(( + Ball, + Collider::from(circle), + 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), + ), + 0.0, + ), + )); + } } #[derive(Component, Default)] @@ -188,11 +190,10 @@ fn setup_walls( fn move_player( time: Res