use bevy::{input::mouse::MouseMotion, prelude::*};
pub fn update_camera_look(
mut event_reader: EventReader<MouseMotion>,
mouse_input: Res<ButtonInput<MouseButton>>,
mut query: Query<(&mut Transform, &Camera3d)>,
) {
const MOUSE_SENSITIVITY: f32 = 2.0;
let mut delta: Vec2 = Vec2::ZERO;
for event in event_reader.read() {
delta += event.delta;
}
if !mouse_input.pressed(MouseButton::Left) {
return;
}
for (mut transform, _) in query.iter_mut() {
let (mut yaw, mut pitch, _roll) = transform.rotation.to_euler(EulerRot::YXZ);
yaw -= delta.x / 180.0 * MOUSE_SENSITIVITY;
pitch -= delta.y / 180.0 * MOUSE_SENSITIVITY;
pitch = pitch.clamp(-std::f32::consts::PI / 2.0, std::f32::consts::PI / 2.0);
transform.rotation = Quat::from_euler(EulerRot::YXZ, yaw, pitch, 0.0);
}
}
pub fn update_camera_move(
keyboard_input: Res<ButtonInput<KeyCode>>,
mut query: Query<(&mut Transform, &Camera3d)>,
) {
const MOVE_SPEED: f32 = 2.0; for (mut transform, _) in query.iter_mut() {
if keyboard_input.pressed(KeyCode::KeyW) {
let forward = transform.forward();
transform.translation += forward * MOVE_SPEED;
}
if keyboard_input.pressed(KeyCode::KeyS) {
let forward = transform.forward();
transform.translation -= forward * MOVE_SPEED;
}
}
}