use super::*;
#[derive(Clone, Copy, Debug)]
pub struct FirstPersonControl {
pub speed: f32,
}
impl FirstPersonControl {
pub fn new(speed: f32) -> Self {
Self { speed }
}
pub fn handle_events(
&mut self,
camera: &mut three_d_asset::Camera,
events: &mut [Event],
) -> bool {
let mut change = false;
for event in events.iter_mut() {
match event {
Event::MouseMotion {
delta,
button,
handled,
..
} if !*handled && Some(MouseButton::Left) == *button => {
camera.yaw(radians(delta.0 * std::f32::consts::PI / 1800.0));
camera.pitch(radians(delta.1 * std::f32::consts::PI / 1800.0));
*handled = true;
change = true;
}
Event::MouseWheel { delta, handled, .. } if !*handled => {
let v = camera.view_direction() * self.speed * delta.1;
camera.translate(v);
*handled = true;
change = true;
}
_ => {}
}
}
change
}
}