1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#[derive(Clone, Copy, Eq, PartialEq, Hash, Debug)]
pub struct GamePadId {
id: gilrs::GamepadId,
}
impl From<gilrs::GamepadId> for GamePadId {
fn from(id: gilrs::GamepadId) -> Self {
Self { id }
}
}
impl From<GamePadId> for gilrs::GamepadId {
fn from(gpid: GamePadId) -> Self {
gpid.id
}
}
#[derive(Clone, Copy, Eq, PartialEq, Hash, Debug)]
pub enum GamePadButton {
South,
North,
East,
West,
DPadUp,
DPadDown,
DPadLeft,
DPadRight,
LeftStick,
RightStick,
LeftShoulder,
RightShoulder,
LeftTrigger,
RightTrigger,
Start,
Back,
}
impl std::convert::TryFrom<gilrs::Button> for GamePadButton {
type Error = gilrs::Button;
fn try_from(button: gilrs::Button) -> Result<Self, gilrs::Button> {
Ok(match button {
gilrs::Button::South => GamePadButton::South,
gilrs::Button::North => GamePadButton::North,
gilrs::Button::East => GamePadButton::East,
gilrs::Button::West => GamePadButton::West,
gilrs::Button::DPadUp => GamePadButton::DPadUp,
gilrs::Button::DPadDown => GamePadButton::DPadDown,
gilrs::Button::DPadLeft => GamePadButton::DPadLeft,
gilrs::Button::DPadRight => GamePadButton::DPadRight,
gilrs::Button::LeftThumb => GamePadButton::LeftStick,
gilrs::Button::RightThumb => GamePadButton::RightStick,
gilrs::Button::LeftTrigger => GamePadButton::LeftShoulder,
gilrs::Button::RightTrigger => GamePadButton::RightShoulder,
gilrs::Button::LeftTrigger2 => GamePadButton::LeftTrigger,
gilrs::Button::RightTrigger2 => GamePadButton::RightTrigger,
gilrs::Button::Start => GamePadButton::Start,
gilrs::Button::Select => GamePadButton::Back,
_ => return Err(button),
})
}
}
impl From<GamePadButton> for gilrs::Button {
fn from(button: GamePadButton) -> Self {
match button {
GamePadButton::South => gilrs::Button::South,
GamePadButton::North => gilrs::Button::North,
GamePadButton::East => gilrs::Button::East,
GamePadButton::West => gilrs::Button::West,
GamePadButton::DPadUp => gilrs::Button::DPadUp,
GamePadButton::DPadDown => gilrs::Button::DPadDown,
GamePadButton::DPadLeft => gilrs::Button::DPadLeft,
GamePadButton::DPadRight => gilrs::Button::DPadRight,
GamePadButton::LeftStick => gilrs::Button::LeftThumb,
GamePadButton::RightStick => gilrs::Button::RightThumb,
GamePadButton::LeftShoulder => gilrs::Button::LeftTrigger,
GamePadButton::RightShoulder => gilrs::Button::RightTrigger,
GamePadButton::LeftTrigger => gilrs::Button::LeftTrigger2,
GamePadButton::RightTrigger => gilrs::Button::RightTrigger2,
GamePadButton::Start => gilrs::Button::Start,
GamePadButton::Back => gilrs::Button::Select,
}
}
}
#[derive(Clone, Copy, Eq, PartialEq, Hash, Debug)]
pub enum GamePadAxis {
LeftStickX,
LeftStickY,
RightStickX,
RightStickY,
}
impl std::convert::TryFrom<gilrs::Axis> for GamePadAxis {
type Error = gilrs::Axis;
fn try_from(axis: gilrs::Axis) -> Result<Self, gilrs::Axis> {
Ok(match axis {
gilrs::Axis::LeftStickX => GamePadAxis::LeftStickX,
gilrs::Axis::LeftStickY => GamePadAxis::LeftStickY,
gilrs::Axis::RightStickX => GamePadAxis::RightStickX,
gilrs::Axis::RightStickY => GamePadAxis::RightStickY,
_ => return Err(axis),
})
}
}