Etterna 0.74.4
Loading...
Searching...
No Matches
GameInput.h
1#ifndef GAME_INPUT_H
2#define GAME_INPUT_H
3
4#include "EnumHelper.h"
5
6class InputScheme;
7
9enum GameController
10{
11 GameController_1 = 0,
12 GameController_2,
13 NUM_GameController,
14 GameController_Invalid,
15};
16auto
17GameControllerToString(GameController mp) -> const std::string&;
18LuaDeclareType(GameController);
19
21enum GameButton
22{
23 GAME_BUTTON_MENULEFT,
24 GAME_BUTTON_MENURIGHT,
25 GAME_BUTTON_MENUUP,
26 GAME_BUTTON_MENUDOWN,
27 GAME_BUTTON_START,
28 GAME_BUTTON_SELECT,
29 GAME_BUTTON_BACK,
30 GAME_BUTTON_COIN,
31 GAME_BUTTON_OPERATOR,
32 GAME_BUTTON_EFFECT_UP,
33 GAME_BUTTON_EFFECT_DOWN,
34 GAME_BUTTON_RESTART,
35 GAME_BUTTON_CUSTOM_01,
36 GAME_BUTTON_CUSTOM_02,
37 GAME_BUTTON_CUSTOM_03,
38 GAME_BUTTON_CUSTOM_04,
39 GAME_BUTTON_CUSTOM_05,
40 GAME_BUTTON_CUSTOM_06,
41 GAME_BUTTON_CUSTOM_07,
42 GAME_BUTTON_CUSTOM_08,
43 GAME_BUTTON_CUSTOM_09,
44 GAME_BUTTON_CUSTOM_10,
45 GAME_BUTTON_CUSTOM_11,
46 GAME_BUTTON_CUSTOM_12,
47 GAME_BUTTON_CUSTOM_13,
48 GAME_BUTTON_CUSTOM_14,
49 GAME_BUTTON_CUSTOM_15,
50 GAME_BUTTON_CUSTOM_16,
51 GAME_BUTTON_CUSTOM_17,
52 GAME_BUTTON_CUSTOM_18,
53 GAME_BUTTON_CUSTOM_19,
54
55 NUM_GameButton,
56 GameButton_Invalid
57};
58
59auto
60GameButtonToString(const InputScheme* pInputs, GameButton i) -> std::string;
61auto
62GameButtonToLocalizedString(const InputScheme* pInputs, GameButton i)
63 -> std::string;
64auto
65StringToGameButton(const InputScheme* pInputs, const std::string& s)
66 -> GameButton;
67
69#define FOREACH_GameButton_Custom(gb) \
70 for (GameButton gb = GAME_BUTTON_CUSTOM_01; (gb) < NUM_GameButton; \
71 enum_add(gb, +1))
72
73#define GAME_BUTTON_NEXT GAME_BUTTON_CUSTOM_01
74
75// dance
76#define DANCE_BUTTON_LEFT GAME_BUTTON_CUSTOM_01
77#define DANCE_BUTTON_RIGHT GAME_BUTTON_CUSTOM_04
78#define DANCE_BUTTON_UP GAME_BUTTON_CUSTOM_03
79#define DANCE_BUTTON_DOWN GAME_BUTTON_CUSTOM_02
80#define NUM_DANCE_BUTTONS GAME_BUTTON_CUSTOM_05
81// solo
82#define SOLO_BUTTON_LEFT GAME_BUTTON_CUSTOM_01
83#define SOLO_BUTTON_RIGHT GAME_BUTTON_CUSTOM_06
84#define SOLO_BUTTON_UP GAME_BUTTON_CUSTOM_04
85#define SOLO_BUTTON_DOWN GAME_BUTTON_CUSTOM_03
86#define SOLO_BUTTON_UPLEFT GAME_BUTTON_CUSTOM_02
87#define SOLO_BUTTON_UPRIGHT GAME_BUTTON_CUSTOM_05
88#define NUM_SOLO_BUTTONS GAME_BUTTON_CUSTOM_07
89// pump
90#define PUMP_BUTTON_UPLEFT GAME_BUTTON_CUSTOM_02
91#define PUMP_BUTTON_UPRIGHT GAME_BUTTON_CUSTOM_04
92#define PUMP_BUTTON_CENTER GAME_BUTTON_CUSTOM_03
93#define PUMP_BUTTON_DOWNLEFT GAME_BUTTON_CUSTOM_01
94#define PUMP_BUTTON_DOWNRIGHT GAME_BUTTON_CUSTOM_05
95#define NUM_PUMP_BUTTONS GAME_BUTTON_CUSTOM_06
96// kb7
97#define KB7_BUTTON_KEY1 GAME_BUTTON_CUSTOM_01
98#define KB7_BUTTON_KEY2 GAME_BUTTON_CUSTOM_02
99#define KB7_BUTTON_KEY3 GAME_BUTTON_CUSTOM_03
100#define KB7_BUTTON_KEY4 GAME_BUTTON_CUSTOM_04
101#define KB7_BUTTON_KEY5 GAME_BUTTON_CUSTOM_05
102#define KB7_BUTTON_KEY6 GAME_BUTTON_CUSTOM_06
103#define KB7_BUTTON_KEY7 GAME_BUTTON_CUSTOM_07
104#define NUM_KB7_BUTTONS GAME_BUTTON_CUSTOM_08
105// ez2(dancer)
106#define EZ2_BUTTON_FOOTUPLEFT GAME_BUTTON_CUSTOM_01
107#define EZ2_BUTTON_FOOTUPRIGHT GAME_BUTTON_CUSTOM_02
108#define EZ2_BUTTON_FOOTDOWN GAME_BUTTON_CUSTOM_03
109#define EZ2_BUTTON_HANDUPLEFT GAME_BUTTON_CUSTOM_04
110#define EZ2_BUTTON_HANDUPRIGHT GAME_BUTTON_CUSTOM_05
111#define EZ2_BUTTON_HANDLRLEFT GAME_BUTTON_CUSTOM_06
112#define EZ2_BUTTON_HANDLRRIGHT GAME_BUTTON_CUSTOM_07
113#define NUM_EZ2_BUTTONS GAME_BUTTON_CUSTOM_08
114// para
115#define PARA_BUTTON_LEFT GAME_BUTTON_CUSTOM_01
116#define PARA_BUTTON_UPLEFT GAME_BUTTON_CUSTOM_02
117#define PARA_BUTTON_UP GAME_BUTTON_CUSTOM_03
118#define PARA_BUTTON_UPRIGHT GAME_BUTTON_CUSTOM_04
119#define PARA_BUTTON_RIGHT GAME_BUTTON_CUSTOM_05
120#define NUM_PARA_BUTTONS GAME_BUTTON_CUSTOM_06
121// ds3ddx
122#define DS3DDX_BUTTON_HANDLEFT GAME_BUTTON_CUSTOM_01
123#define DS3DDX_BUTTON_FOOTDOWNLEFT GAME_BUTTON_CUSTOM_02
124#define DS3DDX_BUTTON_FOOTUPLEFT GAME_BUTTON_CUSTOM_03
125#define DS3DDX_BUTTON_HANDUP GAME_BUTTON_CUSTOM_04
126#define DS3DDX_BUTTON_HANDDOWN GAME_BUTTON_CUSTOM_05
127#define DS3DDX_BUTTON_FOOTUPRIGHT GAME_BUTTON_CUSTOM_06
128#define DS3DDX_BUTTON_FOOTDOWNRIGHT GAME_BUTTON_CUSTOM_07
129#define DS3DDX_BUTTON_HANDRIGHT GAME_BUTTON_CUSTOM_08
130#define NUM_DS3DDX_BUTTONS GAME_BUTTON_CUSTOM_09
131// beat
132#define BEAT_BUTTON_KEY1 GAME_BUTTON_CUSTOM_01
133#define BEAT_BUTTON_KEY2 GAME_BUTTON_CUSTOM_02
134#define BEAT_BUTTON_KEY3 GAME_BUTTON_CUSTOM_03
135#define BEAT_BUTTON_KEY4 GAME_BUTTON_CUSTOM_04
136#define BEAT_BUTTON_KEY5 GAME_BUTTON_CUSTOM_05
137#define BEAT_BUTTON_KEY6 GAME_BUTTON_CUSTOM_06
138#define BEAT_BUTTON_KEY7 GAME_BUTTON_CUSTOM_07
139#define BEAT_BUTTON_SCRATCHUP GAME_BUTTON_CUSTOM_08
140#define BEAT_BUTTON_SCRATCHDOWN GAME_BUTTON_CUSTOM_09
141#define NUM_BEAT_BUTTONS GAME_BUTTON_CUSTOM_10
142// maniax
143#define MANIAX_BUTTON_HANDUPLEFT GAME_BUTTON_CUSTOM_01
144#define MANIAX_BUTTON_HANDUPRIGHT GAME_BUTTON_CUSTOM_02
145#define MANIAX_BUTTON_HANDLRLEFT GAME_BUTTON_CUSTOM_03
146#define MANIAX_BUTTON_HANDLRRIGHT GAME_BUTTON_CUSTOM_04
147#define NUM_MANIAX_BUTTONS GAME_BUTTON_CUSTOM_05
148// techno
149#define TECHNO_BUTTON_LEFT GAME_BUTTON_CUSTOM_01
150#define TECHNO_BUTTON_RIGHT GAME_BUTTON_CUSTOM_02
151#define TECHNO_BUTTON_UP GAME_BUTTON_CUSTOM_03
152#define TECHNO_BUTTON_DOWN GAME_BUTTON_CUSTOM_04
153#define TECHNO_BUTTON_UPLEFT GAME_BUTTON_CUSTOM_05
154#define TECHNO_BUTTON_UPRIGHT GAME_BUTTON_CUSTOM_06
155#define TECHNO_BUTTON_CENTER GAME_BUTTON_CUSTOM_07
156#define TECHNO_BUTTON_DOWNLEFT GAME_BUTTON_CUSTOM_08
157#define TECHNO_BUTTON_DOWNRIGHT GAME_BUTTON_CUSTOM_09
158#define NUM_TECHNO_BUTTONS GAME_BUTTON_CUSTOM_10
159// popn
160#define POPN_BUTTON_LEFT_WHITE GAME_BUTTON_CUSTOM_01
161#define POPN_BUTTON_LEFT_YELLOW GAME_BUTTON_CUSTOM_02
162#define POPN_BUTTON_LEFT_GREEN GAME_BUTTON_CUSTOM_03
163#define POPN_BUTTON_LEFT_BLUE GAME_BUTTON_CUSTOM_04
164#define POPN_BUTTON_RED GAME_BUTTON_CUSTOM_05
165#define POPN_BUTTON_RIGHT_BLUE GAME_BUTTON_CUSTOM_06
166#define POPN_BUTTON_RIGHT_GREEN GAME_BUTTON_CUSTOM_07
167#define POPN_BUTTON_RIGHT_YELLOW GAME_BUTTON_CUSTOM_08
168#define POPN_BUTTON_RIGHT_WHITE GAME_BUTTON_CUSTOM_09
169#define NUM_POPN_BUTTONS GAME_BUTTON_CUSTOM_10
170
171#define LIGHTS_BUTTON_MARQUEE_UP_LEFT GAME_BUTTON_CUSTOM_01
172#define LIGHTS_BUTTON_MARQUEE_UP_RIGHT GAME_BUTTON_CUSTOM_02
173#define LIGHTS_BUTTON_MARQUEE_LR_LEFT GAME_BUTTON_CUSTOM_03
174#define LIGHTS_BUTTON_MARQUEE_LR_RIGHT GAME_BUTTON_CUSTOM_04
175#define LIGHTS_BUTTON_BUTTONS_LEFT GAME_BUTTON_CUSTOM_05
176#define LIGHTS_BUTTON_BUTTONS_RIGHT GAME_BUTTON_CUSTOM_06
177#define LIGHTS_BUTTON_BASS_LEFT GAME_BUTTON_CUSTOM_07
178#define LIGHTS_BUTTON_BASS_RIGHT GAME_BUTTON_CUSTOM_08
179#define NUM_LIGHTS_BUTTONS GAME_BUTTON_CUSTOM_09
180
181#define GAME_BUTTON_LEFT GAME_BUTTON_MENULEFT
182#define GAME_BUTTON_RIGHT GAME_BUTTON_MENURIGHT
183#define GAME_BUTTON_UP GAME_BUTTON_MENUUP
184#define GAME_BUTTON_DOWN GAME_BUTTON_MENUDOWN
185#define GAME_BUTTON_START GAME_BUTTON_START
186#define GAME_BUTTON_BACK GAME_BUTTON_BACK
187#define GAME_BUTTON_RESTART GAME_BUTTON_RESTART
191{
192 GameInput() = default;
193
194 GameInput(GameController c, GameButton b)
195 : controller(c)
196 , button(b)
197 {
198 }
199
200 GameController controller{ GameController_Invalid };
201 GameButton button{ GameButton_Invalid };
202
203 auto operator==(const GameInput& other) const -> bool
204 {
205 return controller == other.controller && button == other.button;
206 };
207 auto operator<(const GameInput& other) const -> bool
208 {
209 if (controller < other.controller) {
210 return true;
211 }
212 if (controller > other.controller) {
213 return false;
214 }
215 return button < other.button;
216 }
217
218 [[nodiscard]] inline auto IsValid() const -> bool
219 {
220 return controller != GameController_Invalid &&
221 button != GameButton_Invalid;
222 };
223 inline void MakeInvalid()
224 {
225 controller = GameController_Invalid;
226 button = GameButton_Invalid;
227 };
228
229 auto ToString(const InputScheme* pInputs) const -> std::string;
230 auto FromString(const InputScheme* pInputs, const std::string& s) -> bool;
231};
232
233#endif
Definition InputMapper.h:156
An input event specific to an InputScheme defined by a logical controller and button.
Definition GameInput.h:191