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::