Browse code

uxnemu: Add dpad support

More info about joyhats in SDL2:
https://wiki.libsdl.org/SDL2/SDL_JoyHatEvent

Lior Stern authored on 12/04/2023 10:48:52 • Devine Lu Linvega committed on 12/04/2023 18:08:48
Showing 1 changed files
... ...
@@ -436,6 +436,42 @@ handle_events(Uxn *u)
436 436
 			controller_down(u, &u->dev[0x80], get_button_joystick(&event));
437 437
 		else if(event.type == SDL_JOYBUTTONUP)
438 438
 			controller_up(u, &u->dev[0x80], get_button_joystick(&event));
439
+		else if(event.type == SDL_JOYHATMOTION) {
440
+			/* NOTE: Assuming there is only one joyhat in the controller */
441
+			switch(event.jhat.value) {
442
+			case SDL_HAT_UP:
443
+				controller_down(u, &u->dev[0x80], 0x10);
444
+				break;
445
+			case SDL_HAT_DOWN:
446
+				controller_down(u, &u->dev[0x80], 0x20);
447
+				break;
448
+			case SDL_HAT_LEFT:
449
+				controller_down(u, &u->dev[0x80], 0x40);
450
+				break;
451
+			case SDL_HAT_RIGHT:
452
+				controller_down(u, &u->dev[0x80], 0x80);
453
+				break;
454
+			case SDL_HAT_LEFTDOWN:
455
+				controller_down(u, &u->dev[0x80], 0x40 | 0x20);
456
+				break;
457
+			case SDL_HAT_LEFTUP:
458
+				controller_down(u, &u->dev[0x80], 0x40 | 0x10);
459
+				break;
460
+			case SDL_HAT_RIGHTDOWN:
461
+				controller_down(u, &u->dev[0x80], 0x80 | 0x20);
462
+				break;
463
+			case SDL_HAT_RIGHTUP:
464
+				controller_down(u, &u->dev[0x80], 0x80 | 0x10);
465
+				break;
466
+			case SDL_HAT_CENTERED:
467
+				/* Set all directions to down */
468
+				controller_up(u, &u->dev[0x80], 0x10 | 0x20 | 0x40 | 0x80);
469
+				break;
470
+			default:
471
+				/* Ignore */
472
+				break;
473
+			}
474
+		}
439 475
 		/* Console */
440 476
 		else if(event.type == stdin_event)
441 477
 			console_input(u, event.cbutton.button);