2023-07-23 00:36:53 +02:00
|
|
|
use gilrs::Button;
|
|
|
|
use winit::event::ScanCode;
|
|
|
|
|
|
|
|
/// UP on dpad
|
|
|
|
pub const DPAD_UP: Buttons = 0x0001;
|
|
|
|
/// DOWN on dpad
|
|
|
|
pub const DPAD_DOWN: Buttons = 0x0002;
|
|
|
|
/// LEFT on dpad
|
|
|
|
pub const DPAD_LEFT: Buttons = 0x0004;
|
|
|
|
/// RIGHT on dpad
|
|
|
|
pub const DPAD_RIGHT: Buttons = 0x008;
|
|
|
|
/// X on nintendo, Y on microsoft, TRIANGLE on sony
|
|
|
|
pub const FACE_UP: Buttons = 0x0010;
|
|
|
|
/// B on nintendo, A on microsoft, CROSS on sony
|
|
|
|
pub const FACE_DOWN: Buttons = 0x0020;
|
|
|
|
/// Y on nintendo, X on microsoft, SQUARE on sony
|
|
|
|
pub const FACE_LEFT: Buttons = 0x0040;
|
|
|
|
/// A on nintendo, B on microsoft, CIRCLE on sony
|
|
|
|
pub const FACE_RIGHT: Buttons = 0x0080;
|
|
|
|
/// left shoulder button
|
|
|
|
pub const L: Buttons = 0x0100;
|
|
|
|
/// right shoulder button
|
|
|
|
pub const R: Buttons = 0x0200;
|
|
|
|
/// start button
|
|
|
|
pub const START: Buttons = 0x0400;
|
|
|
|
/// select button
|
|
|
|
pub const SELECT: Buttons = 0x0800;
|
|
|
|
|
|
|
|
/// Bitmask of button states
|
|
|
|
///
|
|
|
|
/// GSA pretends all input is a snes-like gamepad
|
|
|
|
/// d-pad, 4 face buttons, l and r shoulder buttons, start and select
|
|
|
|
pub type Buttons = u16;
|
|
|
|
|
|
|
|
pub(crate) fn button_from_scancode(scancode: ScanCode) -> Buttons {
|
|
|
|
//todo: currently windows only? check
|
|
|
|
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,
|
|
|
|
}
|
2023-07-20 06:39:34 +02:00
|
|
|
}
|
|
|
|
|
2023-07-23 00:36:53 +02:00
|
|
|
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,
|
2023-07-20 06:39:34 +02:00
|
|
|
}
|
|
|
|
}
|