From 55c50f7185b403ae0d8f8727e309845b8046816f Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Sat, 11 Jan 2020 01:46:51 -0800 Subject: [PATCH] refactor app startup. AppBuilder. clean up examples --- examples/empty.rs | 7 + examples/instancing.rs | 212 ++++++++++ examples/load_model.rs | 9 +- examples/parenting.rs | 110 ++++++ examples/simple.rs | 368 ++---------------- examples/ui.rs | 108 +++++ src/app/app_builder.rs | 55 +++ src/app/app_stage.rs | 18 + src/{application.rs => app/mod.rs} | 72 ++-- src/core/mod.rs | 21 +- src/lib.rs | 4 +- src/render/passes/forward_instanced/mod.rs | 4 + src/render/passes/ui/mod.rs | 4 + src/render/render_graph/mod.rs | 55 +-- .../light_resource_manager.rs | 4 + .../material_resource_manager.rs | 4 + 16 files changed, 633 insertions(+), 422 deletions(-) create mode 100644 examples/empty.rs create mode 100644 examples/instancing.rs create mode 100644 examples/parenting.rs create mode 100644 examples/ui.rs create mode 100644 src/app/app_builder.rs create mode 100644 src/app/app_stage.rs rename src/{application.rs => app/mod.rs} (64%) diff --git a/examples/empty.rs b/examples/empty.rs new file mode 100644 index 0000000000..2884e24afc --- /dev/null +++ b/examples/empty.rs @@ -0,0 +1,7 @@ +use bevy::*; + +fn main() { + AppBuilder::new() + .add_defaults() + .run(); +} \ No newline at end of file diff --git a/examples/instancing.rs b/examples/instancing.rs new file mode 100644 index 0000000000..b55ddc247a --- /dev/null +++ b/examples/instancing.rs @@ -0,0 +1,212 @@ +use bevy::*; +use bevy::{render::*, asset::{Asset, AssetStorage, Handle}, math::{Mat4, Vec3}, Schedulable}; +use rand::{rngs::StdRng, Rng, SeedableRng, random}; +use std::collections::VecDeque; + +struct Person; + +struct Velocity { + pub value: math::Vec3, +} + +struct NavigationPoint { + pub target: math::Vec3, +} + +struct Wander { + pub duration_bounds: math::Vec2, + pub distance_bounds: math::Vec2, + pub duration: f32, + pub elapsed: f32, +} + +fn main() { + AppBuilder::new() + .add_defaults() + .setup(&setup) + .run(); +} + +fn setup(world: &mut World, scheduler: &mut SystemScheduler) { + let cube = Mesh::load(MeshType::Cube); + let cube_handle = { + let mut mesh_storage = world.resources.get_mut::>().unwrap(); + mesh_storage.add(cube, "cube") + }; + + let transform_system_bundle = transform_system_bundle::build(world); + scheduler.add_systems(AppStage::Update, transform_system_bundle); + scheduler.add_system(AppStage::Update, build_wander_system()); + scheduler.add_system(AppStage::Update, build_navigate_system()); + scheduler.add_system(AppStage::Update, build_move_system()); + scheduler.add_system(AppStage::Update, build_print_status_system()); + + world.insert((), vec![ + // lights + ( + Light { + color: wgpu::Color { + r: 0.8, + g: 0.8, + b: 0.5, + a: 1.0, + }, + fov: f32::to_radians(60.0), + depth: 0.1 .. 50.0, + target_view: None, + }, + Material::new(math::vec4(0.5, 0.3, 0.3, 1.0)), + LocalToWorld::identity(), + Translation::new(4.0, -4.0, 5.0), + Rotation::from_euler_angles(0.0, 0.0, 0.0) + ), + ]); + + world.insert((), vec![ + // camera + ( + Camera::new(CameraType::Projection { + fov: std::f32::consts::PI / 4.0, + near: 1.0, + far: 1000.0, + aspect_ratio: 1.0, + }), + ActiveCamera, + LocalToWorld(Mat4::look_at_rh( + Vec3::new(6.0, -40.0, 20.0), + Vec3::new(0.0, 0.0, 0.0), + Vec3::new(0.0, 0.0, 1.0),)), + ) + ]); + + let mut rng = StdRng::from_entropy(); + for _ in 0 .. 70000 { + create_person(world, cube_handle.clone(), + Translation::new(rng.gen_range(-50.0, 50.0), 0.0, rng.gen_range(-50.0, 50.0))); + } +} + +fn build_wander_system() -> Box { + let mut rng = StdRng::from_entropy(); + + SystemBuilder::new("Wander") + .read_resource::