Skip to content
Snippets Groups Projects
input_event.rs 1.61 KiB
Newer Older
StarToaster's avatar
StarToaster committed
use bevy::prelude::KeyCode;

/// Events sent to [`KayakContext`](crate::KayakContext) containing user input data
#[derive(Debug, PartialEq)]
pub enum InputEvent {
    /// An event that occurs when the user moves the mouse
    MouseMoved((f32, f32)),
    /// An event that occurs when the user presses the left mouse button
    MouseLeftPress,
    /// An event that occurs when the user releases the left mouse button
    MouseLeftRelease,
    /// An event that occurs when the user scrolls
    Scroll { dx: f32, dy: f32, is_line: bool },
    /// An event that occurs when the user types in a character
    CharEvent { c: char },
    /// An event that occurs when the user presses or releases a key
    Keyboard { key: KeyCode, is_pressed: bool },
}

/// The various categories an input event can belong to
pub enum InputEventCategory {
    /// A category for events related to the mouse/cursor
    Mouse,
    /// A category for events related to the keyboard
    Keyboard,
    // TODO: Gamepad, etc.
}

impl InputEvent {
    /// Get the category of this input event
    pub fn category(&self) -> InputEventCategory {
        match self {
            // Mouse events
            Self::MouseMoved(..) => InputEventCategory::Mouse,
            Self::MouseLeftPress => InputEventCategory::Mouse,
            Self::MouseLeftRelease => InputEventCategory::Mouse,
            Self::Scroll { .. } => InputEventCategory::Mouse,
            // Keyboard events
            Self::CharEvent { .. } => InputEventCategory::Keyboard,
            Self::Keyboard { .. } => InputEventCategory::Keyboard,
        }
    }
}