1use std::f32::consts::PI;
2
3use bevy::{ input::mouse::MouseMotion, prelude::* };
4
5#[derive(Component)]
6pub struct DebugCamera{
7 pitch: f32,
8 yaw: f32
9}
10
11impl Default for DebugCamera{
12 fn default() -> Self {
13 Self {
14 pitch: 0.0,
15 yaw: -PI / 2.0
16 }
17 }
18}
19
20pub fn setup(
21 mut query: Query<(&mut DebugCamera, &mut Transform)>,
22 time: Res<Time>,
23
24 keys: Res<ButtonInput<KeyCode>>,
25 mouse_buttons: Res<ButtonInput<MouseButton>>,
26 mut mouse_motion: MessageReader<MouseMotion>,
27){
28 let mut delta_time = time.delta_secs();
29 if keys.pressed(KeyCode::ShiftLeft){ delta_time *= 2.0; }
30
31 for ( mut debug, mut transform ) in &mut query{
32 for ev in mouse_motion.read(){
33 if mouse_buttons.pressed(MouseButton::Right){
34 debug.pitch -= ev.delta.y * delta_time * 0.1;
35 debug.yaw -= ev.delta.x * delta_time * 0.1;
36 }
37 }
38
39 transform.rotation = Quat::from_euler(EulerRot::YXZ, debug.yaw, debug.pitch, 0.0);
40
41 if keys.pressed(KeyCode::KeyW){
42 let dir = transform.forward();
43 transform.translation += dir * delta_time;
44 } else if keys.pressed(KeyCode::KeyS){
45 let dir = -transform.forward();
46 transform.translation += dir * delta_time;
47 }
48
49 if keys.pressed(KeyCode::KeyA){
50 let dir = transform.left();
51 transform.translation += dir * delta_time;
52 } else if keys.pressed(KeyCode::KeyD){
53 let dir = -transform.left();
54 transform.translation += dir * delta_time;
55 }
56
57 if keys.pressed(KeyCode::KeyE){
58 let dir = transform.up();
59 transform.translation += dir * delta_time;
60 } else if keys.pressed(KeyCode::KeyQ){
61 let dir = -transform.up();
62 transform.translation += dir * delta_time;
63 }
64 }
65}