... | ... |
@@ -171,7 +171,7 @@ init(void) |
171 | 171 |
as.callback = audio_callback; |
172 | 172 |
as.samples = 512; |
173 | 173 |
as.userdata = NULL; |
174 |
- if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { |
|
174 |
+ if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_GAMECONTROLLER) < 0) { |
|
175 | 175 |
error("sdl", SDL_GetError()); |
176 | 176 |
if(SDL_Init(SDL_INIT_VIDEO) < 0) |
177 | 177 |
return error("sdl", SDL_GetError()); |
... | ... |
@@ -192,6 +192,7 @@ init(void) |
192 | 192 |
SDL_StartTextInput(); |
193 | 193 |
SDL_ShowCursor(SDL_DISABLE); |
194 | 194 |
SDL_EventState(SDL_DROPFILE, SDL_ENABLE); |
195 |
+ SDL_GameControllerEventState(SDL_ENABLE); |
|
195 | 196 |
return 1; |
196 | 197 |
} |
197 | 198 |
|
... | ... |
@@ -391,7 +392,7 @@ restart(Uxn *u) |
391 | 392 |
start(u, "boot.rom"); |
392 | 393 |
} |
393 | 394 |
|
394 |
-Uint8 |
|
395 |
+static Uint8 |
|
395 | 396 |
get_button(SDL_Event *event) |
396 | 397 |
{ |
397 | 398 |
switch(event->key.keysym.sym) { |
... | ... |
@@ -407,7 +408,24 @@ get_button(SDL_Event *event) |
407 | 408 |
return 0x00; |
408 | 409 |
} |
409 | 410 |
|
410 |
-Uint8 |
|
411 |
+static Uint8 |
|
412 |
+get_button_dpad(SDL_Event *e) |
|
413 |
+{ |
|
414 |
+ switch(e->cbutton.button) { |
|
415 |
+ case SDL_CONTROLLER_BUTTON_A: return 0x01; |
|
416 |
+ case SDL_CONTROLLER_BUTTON_B: return 0x02; |
|
417 |
+ case SDL_CONTROLLER_BUTTON_X: return 0x04; |
|
418 |
+ case SDL_CONTROLLER_BUTTON_Y: |
|
419 |
+ case SDL_CONTROLLER_BUTTON_START: return 0x08; |
|
420 |
+ case SDL_CONTROLLER_BUTTON_DPAD_UP: return 0x10; |
|
421 |
+ case SDL_CONTROLLER_BUTTON_DPAD_DOWN: return 0x20; |
|
422 |
+ case SDL_CONTROLLER_BUTTON_DPAD_LEFT: return 0x40; |
|
423 |
+ case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: return 0x80; |
|
424 |
+ } |
|
425 |
+ return 0x00; |
|
426 |
+} |
|
427 |
+ |
|
428 |
+static Uint8 |
|
411 | 429 |
get_key(SDL_Event *event) |
412 | 430 |
{ |
413 | 431 |
SDL_Keymod mods = SDL_GetModState(); |
... | ... |
@@ -491,6 +509,10 @@ run(Uxn *u) |
491 | 509 |
controller_up(devctrl, get_button(&event)); |
492 | 510 |
else if(event.type == SDL_TEXTINPUT) |
493 | 511 |
controller_key(devctrl, event.text.text[0]); |
512 |
+ else if(event.type == SDL_CONTROLLERBUTTONDOWN) |
|
513 |
+ controller_down(devctrl, get_button_dpad(&event)); |
|
514 |
+ else if(event.type == SDL_CONTROLLERBUTTONUP) |
|
515 |
+ controller_up(devctrl, get_button_dpad(&event)); |
|
494 | 516 |
/* Console */ |
495 | 517 |
else if(event.type == stdin_event) |
496 | 518 |
console_input(u, event.cbutton.button); |