input_actions/source/
button.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
2pub enum Button {
3	/// The bottom button in the face-diamond.
4	/// - PS4: X
5	/// - Xbox: A
6	/// - Switch: B
7	FaceBottom,
8	/// The left button in the face-diamond.
9	/// - PS4: Square
10	/// - Xbox: X
11	/// - Switch: Y
12	FaceLeft,
13	/// The right button in the face-diamond.
14	/// - PS4: Circle
15	/// - Xbox: B
16	/// - Switch: A
17	FaceRight,
18	/// The top button in the face-diamond.
19	/// - PS4: Triangle
20	/// - Xbox: Y
21	/// - Switch: X
22	FaceTop,
23
24	/// The button used for confirmation/approval.
25	/// This is a virtual wrapper based on the console.
26	/// - PS4 case 1: [`X (Bottom)`](Button::FaceBottom)
27	/// - Xbox: [`A (Bottom)`](Button::FaceBottom)
28	/// - PS4 case 2: [`Circle (Right)`](Button::FaceRight)
29	/// - Switch: [`A (Right)`](Button::FaceRight)
30	VirtualConfirm,
31	/// The button used for confirmation/approval.
32	/// This is a virtual wrapper based on the console.
33	/// - PS4 case 1: [`Circle (Right)`](Button::FaceRight)
34	/// - Xbox: [`B (Right)`](Button::FaceRight)
35	/// - PS4 case 2: [`X (Bottom)`](Button::FaceBottom)
36	/// - Switch: [`B (Bottom)`](Button::FaceBottom)
37	VirtualDeny,
38
39	/// Pressing in on the left thumbstick
40	LThumbstick,
41	/// Pressing in on the right thumbstick
42	RThumbstick,
43
44	DPadUp,
45	DPadDown,
46	DPadLeft,
47	DPadRight,
48
49	LShoulder,
50	RShoulder,
51
52	LTrigger,
53	RTrigger,
54
55	/// - PS4: Trackpad
56	/// - Xbox: Home/Xbox
57	/// - Switch: Home
58	Special,
59	/// - PS4: Share
60	/// - Xbox: Share/Windows
61	/// - Switch: Minus
62	LSpecial,
63	/// - PS4: Options
64	/// - Xbox: Hamburder
65	/// - Switch: Plus
66	RSpecial,
67}
68
69impl std::convert::TryFrom<gilrs::Button> for Button {
70	type Error = ();
71	fn try_from(other: gilrs::Button) -> Result<Self, Self::Error> {
72		match other {
73			// Action Pad
74			gilrs::Button::South => Ok(Button::FaceBottom),
75			gilrs::Button::East => Ok(Button::FaceLeft),
76			gilrs::Button::North => Ok(Button::FaceTop),
77			gilrs::Button::West => Ok(Button::FaceRight),
78			gilrs::Button::C => Err(()),
79			gilrs::Button::Z => Err(()),
80			// Triggers
81			gilrs::Button::LeftTrigger => Ok(Button::LTrigger),
82			gilrs::Button::LeftTrigger2 => Ok(Button::LTrigger),
83			gilrs::Button::RightTrigger => Ok(Button::RTrigger),
84			gilrs::Button::RightTrigger2 => Ok(Button::RTrigger),
85			// Menu Pad
86			gilrs::Button::Select => Ok(Button::LSpecial),
87			gilrs::Button::Start => Ok(Button::RSpecial),
88			gilrs::Button::Mode => Ok(Button::Special),
89			// Sticks
90			gilrs::Button::LeftThumb => Ok(Button::LThumbstick),
91			gilrs::Button::RightThumb => Ok(Button::RThumbstick),
92			// D-Pad
93			gilrs::Button::DPadUp => Ok(Button::DPadUp),
94			gilrs::Button::DPadDown => Ok(Button::DPadDown),
95			gilrs::Button::DPadLeft => Ok(Button::DPadLeft),
96			gilrs::Button::DPadRight => Ok(Button::DPadRight),
97
98			gilrs::Button::Unknown => Err(()),
99		}
100	}
101}