From 6c95b582a5dcf9471b18319e9cc02dc5e3c1f7fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Sat, 5 Mar 2022 13:23:04 +0000 Subject: [PATCH] Make many_cubes example more interesting (#4015) # Objective - Make the many_cubes example more interesting (and look more like many_sprites) ## Solution - Actually display many cubes - Move the camera around --- examples/3d/many_cubes.rs | 83 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 5 deletions(-) diff --git a/examples/3d/many_cubes.rs b/examples/3d/many_cubes.rs index ad9edbe5b2..8cd3630d2a 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,88 @@ 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, + material, + 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() }); + + commands.spawn_bundle(DirectionalLightBundle { + ..Default::default() + }); +} + +// System for rotating the camera +fn move_camera(time: Res