use cgmath::*;
use winit::{event::*, keyboard::PhysicalKey};
#[derive(Clone, Copy, Debug)]
pub enum EngineInput {
MouseMove(Point2<f32>),
MouseButton(winit::event::MouseButton, winit::event::ElementState),
MouseWheel(winit::event::MouseScrollDelta),
KeyInput(winit::keyboard::KeyCode, winit::event::ElementState)
}
impl EngineInput {
pub fn from_winit_input(event: &WindowEvent) -> Option<Self> {
match event {
WindowEvent::CursorMoved { position, .. } => Some(
Self::MouseMove(
Point2 {
x: position.x as f32,
y: position.y as f32
}
)
),
WindowEvent::MouseInput { state, button, .. } => Some(Self::MouseButton(*button, *state)),
WindowEvent::MouseWheel { delta, .. } => Some(Self::MouseWheel(*delta)),
WindowEvent::KeyboardInput { event, .. } => {
match &event.physical_key {
PhysicalKey::Code(code) => Some(Self::KeyInput(*code, event.state)),
PhysicalKey::Unidentified(_) => None,
}
}
_ => None
}
}
}