Switched to a 3D view.
This commit is contained in:
@@ -1,34 +1,49 @@
|
|||||||
use bevy::color::palettes::basic::RED;
|
|
||||||
use bevy::log;
|
|
||||||
use bevy::prelude::*; // Core Bevy types
|
use bevy::prelude::*; // Core Bevy types
|
||||||
|
|
||||||
const GRAVITY: f32 = -20.0;
|
const GRAVITY: f32 = -20.0;
|
||||||
|
const CAMERA_SPEED: f32 = 5.0; // units per second
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
.add_plugins(DefaultPlugins)
|
.add_plugins(DefaultPlugins)
|
||||||
.add_systems(Startup, setup)
|
.add_systems(Startup, setup)
|
||||||
.add_systems(Update, (apply_gravity, velocity_timestep).chain())
|
.add_systems(Update, (apply_gravity, velocity_timestep).chain())
|
||||||
|
.add_systems(Update, move_camera)
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>, mut materials: ResMut<Assets<ColorMaterial>>) {
|
/// set up a simple 3D scene
|
||||||
|
fn setup(
|
||||||
commands.spawn(Camera2d);
|
mut commands: Commands,
|
||||||
|
mut meshes: ResMut<Assets<Mesh>>,
|
||||||
let shape =meshes.add(Circle::new(50.0));
|
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||||
|
) {
|
||||||
commands.spawn((Mesh2d(shape.clone()), MeshMaterial2d(materials.add(Color::from(RED))), Transform::from_xyz(100.0, 0.0, 0.0), Velocity(vec3(
|
// circular base
|
||||||
0.0,
|
commands.spawn((
|
||||||
100.0,
|
Mesh3d(meshes.add(Circle::new(4.0))),
|
||||||
0.0
|
MeshMaterial3d(materials.add(Color::WHITE)),
|
||||||
))));
|
Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)),
|
||||||
|
));
|
||||||
commands.spawn((Mesh2d(shape.clone()), MeshMaterial2d(materials.add(Color::from(RED))), Transform::from_xyz(300.0, 0.0, 0.0), Velocity(vec3(
|
// cube
|
||||||
0.0,
|
commands.spawn((
|
||||||
50.0,
|
Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))),
|
||||||
0.0
|
MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))),
|
||||||
))));}
|
Transform::from_xyz(0.0, 0.5, 0.0),
|
||||||
|
));
|
||||||
|
// light
|
||||||
|
commands.spawn((
|
||||||
|
PointLight {
|
||||||
|
shadows_enabled: true,
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
Transform::from_xyz(4.0, 8.0, 4.0),
|
||||||
|
));
|
||||||
|
// camera
|
||||||
|
commands.spawn((
|
||||||
|
Camera3d::default(),
|
||||||
|
Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
struct Velocity(Vec3);
|
struct Velocity(Vec3);
|
||||||
@@ -43,4 +58,26 @@ fn apply_gravity(time: Res<Time>, mut query: Query<&mut Velocity>) {
|
|||||||
for mut velocity in query.iter_mut() {
|
for mut velocity in query.iter_mut() {
|
||||||
velocity.0.y += GRAVITY * time.delta_secs();
|
velocity.0.y += GRAVITY * time.delta_secs();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn move_camera(
|
||||||
|
time: Res<Time>,
|
||||||
|
keyboard_input: Res<ButtonInput<KeyCode>>,
|
||||||
|
mut camera: Single<&mut Transform, With<Camera3d>>,
|
||||||
|
) {
|
||||||
|
let mut direction = Vec3::ZERO;
|
||||||
|
|
||||||
|
if keyboard_input.pressed(KeyCode::KeyW) {
|
||||||
|
direction.y += 1.0;
|
||||||
|
}
|
||||||
|
if keyboard_input.pressed(KeyCode::KeyS) {
|
||||||
|
direction.y -= 1.0;
|
||||||
|
}
|
||||||
|
if keyboard_input.pressed(KeyCode::KeyA) {
|
||||||
|
direction.x -= 1.0;
|
||||||
|
}
|
||||||
|
if keyboard_input.pressed(KeyCode::KeyD) {
|
||||||
|
direction.x += 1.0;
|
||||||
|
}
|
||||||
|
camera.translation += direction * CAMERA_SPEED * time.delta_secs(); // or use time.delta_seconds()
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user