1 //-------------------------------------------------------------------------
2 /*
3 Copyright (C) 2010 EDuke32 developers and contributors
4
5 This file is part of EDuke32.
6
7 EDuke32 is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License version 2
9 as published by the Free Software Foundation.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
15 See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 */
21 //-------------------------------------------------------------------------
22
23 #include "global.h"
24 #include "game.h"
25 #include "function.h"
26 #include "keyboard.h"
27 #include "mouse.h"
28 #include "joystick.h"
29 #include "control.h"
30 #include "input.h"
31 #include "menus.h"
32
I_CheckAllInput(void)33 int32_t I_CheckAllInput(void)
34 {
35 return
36 KB_KeyWaiting()
37 || MOUSE_GetButtons()
38 || JOYSTICK_GetButtons()
39 #if defined EDUKE32_IOS
40 || g_mouseClickState == MOUSE_PRESSED
41 #endif
42 ;
43 }
I_ClearAllInput(void)44 void I_ClearAllInput(void)
45 {
46 KB_FlushKeyboardQueue();
47 KB_ClearKeysDown();
48 MOUSE_ClearAllButtons();
49 JOYSTICK_ClearAllButtons();
50 CONTROL_ClearAllButtons();
51 #if defined EDUKE32_IOS
52 mouseAdvanceClickState();
53 #endif
54 }
55
56
I_TextSubmit(void)57 int32_t I_TextSubmit(void)
58 {
59 return
60 KB_KeyPressed(sc_Enter)
61 || KB_KeyPressed(sc_kpad_Enter)
62 #if !defined EDUKE32_TOUCH_DEVICES
63 || MOUSEINACTIVECONDITIONAL(MOUSE_GetButtons()&LEFT_MOUSE)
64 #endif
65 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_A))
66 #if defined(GEKKO)
67 || MOUSEINACTIVECONDITIONAL(JOYSTICK_GetButtons()&WII_A)
68 #endif
69 ;
70 }
71
I_TextSubmitClear(void)72 void I_TextSubmitClear(void)
73 {
74 KB_FlushKeyboardQueue();
75 KB_ClearKeyDown(sc_kpad_Enter);
76 KB_ClearKeyDown(sc_Enter);
77 MOUSE_ClearButton(LEFT_MOUSE);
78 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_A);
79 #if defined(GEKKO)
80 JOYSTICK_ClearButton(WII_A);
81 #endif
82 }
83
I_AdvanceTrigger(void)84 int32_t I_AdvanceTrigger(void)
85 {
86 return
87 I_TextSubmit()
88 || KB_KeyPressed(sc_Space);
89 }
90
I_AdvanceTriggerClear(void)91 void I_AdvanceTriggerClear(void)
92 {
93 I_TextSubmitClear();
94 KB_ClearKeyDown(sc_Space);
95 }
96
I_ReturnTrigger(void)97 int32_t I_ReturnTrigger(void)
98 {
99 return
100 KB_KeyPressed(sc_Escape)
101 || (MOUSE_GetButtons()&RIGHT_MOUSE)
102 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_B))
103 #if defined(GEKKO)
104 || (JOYSTICK_GetButtons()&(WII_B|WII_HOME))
105 #endif
106 ;
107 }
108
I_ReturnTriggerClear(void)109 void I_ReturnTriggerClear(void)
110 {
111 KB_FlushKeyboardQueue();
112 KB_ClearKeyDown(sc_Escape);
113 MOUSE_ClearButton(RIGHT_MOUSE);
114 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_B);
115 #if defined(GEKKO)
116 JOYSTICK_ClearButton(WII_B);
117 JOYSTICK_ClearButton(WII_HOME);
118 #endif
119 }
120
I_GeneralTrigger(void)121 int32_t I_GeneralTrigger(void)
122 {
123 return
124 I_AdvanceTrigger()
125 || I_ReturnTrigger()
126 #if !defined GEKKO
127 || BUTTON(gamefunc_Open)
128 # if !defined EDUKE32_TOUCH_DEVICES
129 || MOUSEINACTIVECONDITIONAL(BUTTON(gamefunc_Fire))
130 # else
131 || BUTTON(gamefunc_Fire)
132 # endif
133 #endif
134 || BUTTON(gamefunc_Crouch)
135 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_START))
136 ;
137 }
138
I_GeneralTriggerClear(void)139 void I_GeneralTriggerClear(void)
140 {
141 I_AdvanceTriggerClear();
142 I_ReturnTriggerClear();
143 #if !defined GEKKO
144 CONTROL_ClearButton(gamefunc_Open);
145 CONTROL_ClearButton(gamefunc_Fire);
146 #endif
147 CONTROL_ClearButton(gamefunc_Crouch);
148 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_START);
149 }
150
151
I_EscapeTrigger(void)152 int32_t I_EscapeTrigger(void)
153 {
154 return
155 KB_KeyPressed(sc_Escape)
156 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_START))
157 #if defined(GEKKO)
158 || (JOYSTICK_GetButtons()&WII_HOME)
159 #endif
160 ;
161 }
162
I_EscapeTriggerClear(void)163 void I_EscapeTriggerClear(void)
164 {
165 KB_FlushKeyboardQueue();
166 KB_ClearKeyDown(sc_Escape);
167 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_START);
168 #if defined(GEKKO)
169 JOYSTICK_ClearButton(WII_HOME);
170 #endif
171 }
172
173
I_MenuUp(void)174 int32_t I_MenuUp(void)
175 {
176 return
177 KB_KeyPressed(sc_UpArrow)
178 || KB_KeyPressed(sc_kpad_8)
179 || (MOUSE_GetButtons()&WHEELUP_MOUSE)
180 || BUTTON(gamefunc_Move_Forward)
181 || (JOYSTICK_GetHat(0)&HAT_UP)
182 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_UP))
183 || CONTROL_GetGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTY)
184 ;
185 }
186
I_MenuUpClear(void)187 void I_MenuUpClear(void)
188 {
189 KB_ClearKeyDown(sc_UpArrow);
190 KB_ClearKeyDown(sc_kpad_8);
191 MOUSE_ClearButton(WHEELUP_MOUSE);
192 CONTROL_ClearButton(gamefunc_Move_Forward);
193 JOYSTICK_ClearHat(0);
194 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_UP);
195 CONTROL_ClearGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTY);
196 }
197
198
I_MenuDown(void)199 int32_t I_MenuDown(void)
200 {
201 return
202 KB_KeyPressed(sc_DownArrow)
203 || KB_KeyPressed(sc_kpad_2)
204 || (MOUSE_GetButtons()&WHEELDOWN_MOUSE)
205 || BUTTON(gamefunc_Move_Backward)
206 || (JOYSTICK_GetHat(0)&HAT_DOWN)
207 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_DOWN))
208 || CONTROL_GetGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTY)
209 ;
210 }
211
I_MenuDownClear(void)212 void I_MenuDownClear(void)
213 {
214 KB_ClearKeyDown(sc_DownArrow);
215 KB_ClearKeyDown(sc_kpad_2);
216 KB_ClearKeyDown(sc_PgDn);
217 MOUSE_ClearButton(WHEELDOWN_MOUSE);
218 CONTROL_ClearButton(gamefunc_Move_Backward);
219 JOYSTICK_ClearHat(0);
220 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_DOWN);
221 CONTROL_ClearGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTY);
222 }
223
224
I_MenuLeft(void)225 int32_t I_MenuLeft(void)
226 {
227 return
228 KB_KeyPressed(sc_LeftArrow)
229 || KB_KeyPressed(sc_kpad_4)
230 || (SHIFTS_IS_PRESSED && KB_KeyPressed(sc_Tab))
231 || BUTTON(gamefunc_Turn_Left)
232 || BUTTON(gamefunc_Strafe_Left)
233 || (JOYSTICK_GetHat(0)&HAT_LEFT)
234 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_LEFT))
235 || CONTROL_GetGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTX)
236 ;
237 }
238
I_MenuLeftClear(void)239 void I_MenuLeftClear(void)
240 {
241 KB_ClearKeyDown(sc_LeftArrow);
242 KB_ClearKeyDown(sc_kpad_4);
243 KB_ClearKeyDown(sc_Tab);
244 CONTROL_ClearButton(gamefunc_Turn_Left);
245 CONTROL_ClearButton(gamefunc_Strafe_Left);
246 JOYSTICK_ClearHat(0);
247 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_LEFT);
248 CONTROL_ClearGameControllerDigitalAxisNeg(GAMECONTROLLER_AXIS_LEFTX);
249 }
250
251
I_MenuRight(void)252 int32_t I_MenuRight(void)
253 {
254 return
255 KB_KeyPressed(sc_RightArrow)
256 || KB_KeyPressed(sc_kpad_6)
257 || (!SHIFTS_IS_PRESSED && KB_KeyPressed(sc_Tab))
258 || BUTTON(gamefunc_Turn_Right)
259 || BUTTON(gamefunc_Strafe_Right)
260 || (MOUSE_GetButtons()&MIDDLE_MOUSE)
261 || (JOYSTICK_GetHat(0)&HAT_RIGHT)
262 || (JOYSTICK_GetGameControllerButtons()&(1<<GAMECONTROLLER_BUTTON_DPAD_RIGHT))
263 || CONTROL_GetGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTX)
264 ;
265 }
266
I_MenuRightClear(void)267 void I_MenuRightClear(void)
268 {
269 KB_ClearKeyDown(sc_RightArrow);
270 KB_ClearKeyDown(sc_kpad_6);
271 KB_ClearKeyDown(sc_Tab);
272 CONTROL_ClearButton(gamefunc_Turn_Right);
273 CONTROL_ClearButton(gamefunc_Strafe_Right);
274 MOUSE_ClearButton(MIDDLE_MOUSE);
275 JOYSTICK_ClearHat(0);
276 JOYSTICK_ClearGameControllerButton(1<<GAMECONTROLLER_BUTTON_DPAD_RIGHT);
277 CONTROL_ClearGameControllerDigitalAxisPos(GAMECONTROLLER_AXIS_LEFTX);
278 }
279
280
I_PanelUp(void)281 int32_t I_PanelUp(void)
282 {
283 return
284 I_MenuUp()
285 || I_MenuLeft()
286 || KB_KeyPressed(sc_PgUp)
287 ;
288 }
289
I_PanelUpClear(void)290 void I_PanelUpClear(void)
291 {
292 I_MenuUpClear();
293 I_MenuLeftClear();
294 KB_ClearKeyDown(sc_PgUp);
295 }
296
297
I_PanelDown(void)298 int32_t I_PanelDown(void)
299 {
300 return
301 I_MenuDown()
302 || I_MenuRight()
303 || KB_KeyPressed(sc_PgDn)
304 || I_AdvanceTrigger()
305 ;
306 }
307
I_PanelDownClear(void)308 void I_PanelDownClear(void)
309 {
310 I_MenuDownClear();
311 I_MenuRightClear();
312 KB_ClearKeyDown(sc_PgDn);
313 I_AdvanceTriggerClear();
314 }
315
316
I_SliderLeft(void)317 int32_t I_SliderLeft(void)
318 {
319 return
320 I_MenuLeft()
321 #if !defined EDUKE32_TOUCH_DEVICES
322 || MOUSEINACTIVECONDITIONAL((MOUSE_GetButtons()&LEFT_MOUSE) && (MOUSE_GetButtons()&WHEELUP_MOUSE))
323 #endif
324 ;
325 }
326
I_SliderLeftClear(void)327 void I_SliderLeftClear(void)
328 {
329 I_MenuLeftClear();
330 MOUSE_ClearButton(WHEELUP_MOUSE);
331 }
332
333
I_SliderRight(void)334 int32_t I_SliderRight(void)
335 {
336 return
337 I_MenuRight()
338 #if !defined EDUKE32_TOUCH_DEVICES
339 || MOUSEINACTIVECONDITIONAL((MOUSE_GetButtons()&LEFT_MOUSE) && (MOUSE_GetButtons()&WHEELDOWN_MOUSE))
340 #endif
341 ;
342 }
343
I_SliderRightClear(void)344 void I_SliderRightClear(void)
345 {
346 I_MenuRightClear();
347 MOUSE_ClearButton(WHEELDOWN_MOUSE);
348 }
349
350
I_EnterText(char * t,int32_t maxlength,int32_t flags)351 int32_t I_EnterText(char *t, int32_t maxlength, int32_t flags)
352 {
353 char ch;
354 int32_t inputloc = Bstrlen(typebuf);
355
356 while ((ch = KB_GetCh()) != 0)
357 {
358 if (ch == asc_BackSpace)
359 {
360 if (inputloc > 0)
361 {
362 inputloc--;
363 *(t+inputloc) = 0;
364 }
365 }
366 else
367 {
368 if (ch == asc_Enter)
369 {
370 I_AdvanceTriggerClear();
371 return 1;
372 }
373 else if (ch == asc_Escape)
374 {
375 I_ReturnTriggerClear();
376 return -1;
377 }
378 else if (ch >= 32 && inputloc < maxlength && ch < 127)
379 {
380 if (!(flags & INPUT_NUMERIC) || (ch >= '0' && ch <= '9'))
381 {
382 // JBF 20040508: so we can have numeric only if we want
383 *(t+inputloc) = ch;
384 *(t+inputloc+1) = 0;
385 inputloc++;
386 }
387 }
388 }
389 }
390
391 if (I_TextSubmit())
392 {
393 I_TextSubmitClear();
394 return 1;
395 }
396 if (I_ReturnTrigger())
397 {
398 I_ReturnTriggerClear();
399 return -1;
400 }
401
402 return 0;
403 }
404