tge 0.0.4

A lightweight cross-platform 2D game framework written in pure Rust and based on OpenGL 3.3+.
Documentation
use gilrs::Button;

#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
pub enum GamepadButton {
    LeftStick,
    RightStick,
    DPadUp,
    DPadDown,
    DPadLeft,
    DPadRight,
    North,
    South,
    West,
    East,
    LeftTrigger,
    LeftTrigger2,
    RightTrigger,
    RightTrigger2,
    Start,
    Select,
    Home,
    Other(u32),
}

impl GamepadButton {
    pub fn is_stick(&self) -> bool {
        match self {
            Self::LeftStick | Self::RightStick => true,
            _ => false,
        }
    }

    pub fn is_d_pad(&self) -> bool {
        match self {
            Self::DPadUp | Self::DPadDown | Self::DPadLeft | Self::DPadRight => true,
            _ => false,
        }
    }

    pub fn is_action(&self) -> bool {
        match self {
            Self::North | Self::South | Self::West | Self::East => true,
            _ => false,
        }
    }

    pub fn is_trigger(&self) -> bool {
        match self {
            Self::LeftTrigger | Self::LeftTrigger2 | Self::RightTrigger | Self::RightTrigger2 => true,
            _ => false,
        }
    }

    pub fn is_menu(&self) -> bool {
        match self {
            Self::Start | Self::Select | Self::Home => true,
            _ => false,
        }
    }
}

impl From<Button> for GamepadButton {
    fn from(button: Button) -> Self {
        match button {
            Button::South => Self::South,
            Button::East => Self::East,
            Button::North => Self::North,
            Button::West => Self::West,
            Button::C => Self::Other(1),
            Button::Z => Self::Other(2),
            Button::LeftTrigger => Self::LeftTrigger,
            Button::LeftTrigger2 => Self::LeftTrigger2,
            Button::RightTrigger => Self::RightTrigger,
            Button::RightTrigger2 => Self::RightTrigger2,
            Button::Select => Self::Select,
            Button::Start => Self::Start,
            Button::Mode => Self::Home,
            Button::LeftThumb => Self::LeftStick,
            Button::RightThumb => Self::RightStick,
            Button::DPadUp => Self::DPadUp,
            Button::DPadDown => Self::DPadDown,
            Button::DPadLeft => Self::DPadLeft,
            Button::DPadRight => Self::DPadRight,
            Button::Unknown => Self::Other(0),
        }
    }
}