Switched to a 3D view.

This commit is contained in:
2025-12-24 11:11:36 +01:00
parent a339776e2f
commit ce3e08c1e7

View File

@@ -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);
@@ -44,3 +59,25 @@ fn apply_gravity(time: Res<Time>, mut query: Query<&mut Velocity>) {
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()
}