use bevy::{ core::Time, diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}, ecs::prelude::*, input::Input, math::Vec3, pbr2::{OmniLightBundle, PbrBundle, StandardMaterial}, prelude::{App, Assets, KeyCode, Transform}, render2::{ camera::PerspectiveCameraBundle, color::Color, mesh::{shape, Mesh}, }, PipelinedDefaultPlugins, }; fn main() { App::new() .add_plugins(PipelinedDefaultPlugins) .add_plugin(FrameTimeDiagnosticsPlugin::default()) .add_plugin(LogDiagnosticsPlugin::default()) .add_startup_system(setup.system()) .add_system(movement.system()) .run(); } struct Movable; /// set up a simple 3D scene fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { // plane commands.spawn_bundle(PbrBundle { mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), material: materials.add(StandardMaterial { base_color: Color::INDIGO, perceptual_roughness: 1.0, ..Default::default() }), ..Default::default() }); // cube commands .spawn_bundle(PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(StandardMaterial { base_color: Color::PINK, perceptual_roughness: 0.0, metallic: 1.0, reflectance: 1.0, ..Default::default() }), transform: Transform::from_xyz(0.0, 1.0, 0.0), ..Default::default() }) .insert(Movable); // sphere commands .spawn_bundle(PbrBundle { mesh: meshes.add(Mesh::from(shape::UVSphere { radius: 0.5, ..Default::default() })), material: materials.add(StandardMaterial { base_color: Color::LIME_GREEN, ..Default::default() }), transform: Transform::from_xyz(1.5, 1.0, 1.5), ..Default::default() }) .insert(Movable); // light commands.spawn_bundle(OmniLightBundle { transform: Transform::from_xyz(5.0, 8.0, 2.0), ..Default::default() }); // camera commands.spawn_bundle(PerspectiveCameraBundle { transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y), ..Default::default() }); } fn movement( input: Res>, time: Res