reaction 0.2.0

Universal low-latency input handling for game engines
Documentation
use crate::types::{GamepadAxis, GamepadButton, GamepadId, KeyCode, MouseButton};

#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "config-files", derive(serde::Serialize, serde::Deserialize))]
pub enum InputEvent {
    KeyPress {
        key: KeyCode,
    },
    KeyRelease {
        key: KeyCode,
    },
    MouseMove {
        x: f32,
        y: f32,
        dx: f32,
        dy: f32,
    },
    MouseButtonPress {
        button: MouseButton,
        x: f32,
        y: f32,
    },
    MouseButtonRelease {
        button: MouseButton,
        x: f32,
        y: f32,
    },
    MouseScroll {
        delta_x: f32,
        delta_y: f32,
    },
    GamepadButtonPress {
        id: GamepadId,
        button: GamepadButton,
    },
    GamepadButtonRelease {
        id: GamepadId,
        button: GamepadButton,
    },
    GamepadAxisMove {
        id: GamepadId,
        axis: GamepadAxis,
        value: f32,
    },
}

#[derive(Debug, Clone)]
#[cfg_attr(feature = "config-files", derive(serde::Serialize, serde::Deserialize))]
pub struct TimestampedEvent {
    pub timestamp: f64,
    pub frame: u32,
    pub event: InputEvent,
}