hexga_engine 0.0.11-beta.53

A multimedia game and software engine for handling graphics, audio, and input.
Documentation
use super::*;

#[derive(Debug, Clone, PartialEq)]
pub enum InputEvent
{
    Key(KeyEvent),
}
impl From<KeyEvent> for InputEvent
{
    fn from(key: KeyEvent) -> Self { Self::Key(key) }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct KeyEvent
{
    pub code: KeyCode,
    pub repeat: ButtonRepeat,
    pub state: ButtonState,
    pub char: Option<char>,
}
impl Has<ButtonRepeat> for KeyEvent
{
    fn retrieve(&self) -> ButtonRepeat { self.repeat }
}
impl Has<ButtonState> for KeyEvent
{
    fn retrieve(&self) -> ButtonState { self.state }
}

impl From<winit::event::KeyEvent> for KeyEvent
{
    fn from(event: winit::event::KeyEvent) -> Self
    {
        let char: Option<char> = match &event.logical_key
        {
            winit::keyboard::Key::Character(s) if s.chars().count() == 1 => s.chars().next(),
            _ => None,
        };
        Self {
            code: event.physical_key.into(),
            repeat: if event.repeat
            {
                ButtonRepeat::Repeated
            }
            else
            {
                ButtonRepeat::NotRepeated
            },
            state: if event.state.is_pressed()
            {
                ButtonState::Down
            }
            else
            {
                ButtonState::Up
            },
            char,
        }
    }
}