use gilrs::Button;
use winit::event::ScanCode;
pub const DPAD_UP: Buttons = 0x0001;
pub const DPAD_DOWN: Buttons = 0x0002;
pub const DPAD_LEFT: Buttons = 0x0004;
pub const DPAD_RIGHT: Buttons = 0x008;
pub const FACE_UP: Buttons = 0x0010;
pub const FACE_DOWN: Buttons = 0x0020;
pub const FACE_LEFT: Buttons = 0x0040;
pub const FACE_RIGHT: Buttons = 0x0080;
pub const L: Buttons = 0x0100;
pub const R: Buttons = 0x0200;
pub const START: Buttons = 0x0400;
pub const SELECT: Buttons = 0x0800;
pub type Buttons = u16;
pub(crate) fn button_from_scancode(scancode: ScanCode) -> Buttons {
match scancode {
0x0010 => L,
0x0011 => FACE_UP,
0x0012 => R,
0x001C => START,
0x001E => FACE_LEFT,
0x001F => FACE_DOWN,
0x0020 => FACE_RIGHT,
0x0039 => SELECT,
0xE048 => DPAD_UP,
0xE04B => DPAD_LEFT,
0xE04D => DPAD_RIGHT,
0xE050 => DPAD_DOWN,
_ => 0,
}
}
pub(crate) fn button_from_gilrs(button: Button) -> Buttons {
match button {
Button::South => FACE_DOWN,
Button::East => FACE_RIGHT,
Button::North => FACE_UP,
Button::West => FACE_LEFT,
Button::LeftTrigger | Button::LeftTrigger2 => L,
Button::RightTrigger | Button::RightTrigger2 => R,
Button::Select => SELECT,
Button::Start => START,
Button::DPadUp => DPAD_UP,
Button::DPadDown => DPAD_DOWN,
Button::DPadLeft => DPAD_LEFT,
Button::DPadRight => DPAD_RIGHT,
_ => 0,
}
}