From 8e867f884a4c0450c453cbdc7377b232fc9eeb5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Tue, 22 Feb 2022 18:04:45 +0100 Subject: [PATCH 1/3] actually display many cubes --- examples/3d/many_cubes.rs | 79 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 5 deletions(-) diff --git a/examples/3d/many_cubes.rs b/examples/3d/many_cubes.rs index ad9edbe5b29af..a2ec7f4ad013f 100644 --- a/examples/3d/many_cubes.rs +++ b/examples/3d/many_cubes.rs @@ -9,6 +9,8 @@ fn main() { .add_plugin(FrameTimeDiagnosticsPlugin::default()) .add_plugin(LogDiagnosticsPlugin::default()) .add_startup_system(setup) + .add_system(move_camera) + .add_system(print_mesh_count) .run(); } @@ -17,8 +19,8 @@ fn setup( mut meshes: ResMut>, mut materials: ResMut>, ) { - const WIDTH: usize = 100; - const HEIGHT: usize = 100; + const WIDTH: usize = 200; + const HEIGHT: usize = 200; let mesh = meshes.add(Mesh::from(shape::Cube { size: 1.0 })); let material = materials.add(StandardMaterial { base_color: Color::PINK, @@ -28,17 +30,84 @@ fn setup( for y in 0..HEIGHT { // cube commands.spawn_bundle(PbrBundle { - mesh: mesh.clone(), - material: material.clone(), + mesh: mesh.clone_weak(), + material: material.clone_weak(), transform: Transform::from_xyz((x as f32) * 2.0, (y as f32) * 2.0, 0.0), ..default() }); + commands.spawn_bundle(PbrBundle { + mesh: mesh.clone_weak(), + material: material.clone_weak(), + transform: Transform::from_xyz( + (x as f32) * 2.0, + HEIGHT as f32 * 2.0, + (y as f32) * 2.0, + ), + ..Default::default() + }); + commands.spawn_bundle(PbrBundle { + mesh: mesh.clone_weak(), + material: material.clone_weak(), + transform: Transform::from_xyz((x as f32) * 2.0, 0.0, (y as f32) * 2.0), + ..Default::default() + }); + commands.spawn_bundle(PbrBundle { + mesh: mesh.clone_weak(), + material: material.clone_weak(), + transform: Transform::from_xyz(0.0, (x as f32) * 2.0, (y as f32) * 2.0), + ..Default::default() + }); } } + // add one cube, the only one with strong handles + // also serves as a reference point during rotation + commands.spawn_bundle(PbrBundle { + mesh: mesh.clone(), + material: material.clone(), + transform: Transform { + translation: Vec3::new(0.0, HEIGHT as f32 * 2.0, 0.0), + scale: Vec3::splat(5.0), + ..Default::default() + }, + ..Default::default() + }); + // camera commands.spawn_bundle(PerspectiveCameraBundle { - transform: Transform::from_xyz(80.0, 80.0, 300.0), + transform: Transform::from_xyz(WIDTH as f32, HEIGHT as f32, WIDTH as f32), ..default() }); } + +// System for rotating the camera +fn move_camera(time: Res