break;
#if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+ case SDL_CONTROLLERBUTTONDOWN:
+ case SDL_CONTROLLERBUTTONUP:
+ HandleSpecialGameControllerButtons(event);
+ /* FALL THROUGH */
+ case SDL_CONTROLLERDEVICEADDED:
+ case SDL_CONTROLLERDEVICEREMOVED:
+ case SDL_CONTROLLERAXISMOTION:
+#endif
case SDL_JOYAXISMOTION:
case SDL_JOYBUTTONDOWN:
case SDL_JOYBUTTONUP:
ClearPlayerAction();
break;
+#if defined(TARGET_SDL2)
+ case SDL_CONTROLLERBUTTONUP:
+ ClearPlayerAction();
+ break;
+#endif
+
default:
HandleOtherEvents(&event);
break;
key_joystick_mapping = 0;
break;
+#if defined(TARGET_SDL2)
+ case SDL_CONTROLLERBUTTONUP:
+ key_joystick_mapping = 0;
+ break;
+#endif
+
case EVENT_MAPNOTIFY:
window_unmapped = FALSE;
break;
{
int i;
int result = 0;
+ boolean no_joysticks_configured = TRUE;
+ boolean use_as_joystick_nr = (game_status != GAME_MODE_PLAYING);
+ static byte joy_action_last[MAX_PLAYERS];
+
+ for (i = 0; i < MAX_PLAYERS; i++)
+ if (setup.input[i].use_joystick)
+ no_joysticks_configured = FALSE;
+
+ /* if no joysticks configured, map connected joysticks to players */
+ if (no_joysticks_configured)
+ use_as_joystick_nr = TRUE;
for (i = 0; i < MAX_PLAYERS; i++)
{
byte joy_action = 0;
- /*
- if (!setup.input[i].use_joystick)
- continue;
- */
-
- joy_action = Joystick(i);
+ joy_action = JoystickExt(i, use_as_joystick_nr);
result |= joy_action;
- if (!setup.input[i].use_joystick)
- continue;
+ if ((setup.input[i].use_joystick || no_joysticks_configured) &&
+ joy_action != joy_action_last[i])
+ stored_player[i].action = joy_action;
- stored_player[i].action = joy_action;
+ joy_action_last[i] = joy_action;
}
return result;
return;
}
+ if (tape.recording && tape.pausing)
+ {
+ if (joystick & JOY_ACTION)
+ TapeTogglePause(TAPE_TOGGLE_MANUAL);
+ }
+
break;
default:
break;
}
}
+
+void HandleSpecialGameControllerButtons(Event *event)
+{
+#if defined(TARGET_SDL2)
+ switch (event->type)
+ {
+ case SDL_CONTROLLERBUTTONDOWN:
+ if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START)
+ HandleKey(KSYM_space, KEY_PRESSED);
+ else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK)
+ HandleKey(KSYM_Escape, KEY_PRESSED);
+
+ break;
+
+ case SDL_CONTROLLERBUTTONUP:
+ if (event->cbutton.button == SDL_CONTROLLER_BUTTON_START)
+ HandleKey(KSYM_space, KEY_RELEASED);
+ else if (event->cbutton.button == SDL_CONTROLLER_BUTTON_BACK)
+ HandleKey(KSYM_Escape, KEY_RELEASED);
+
+ break;
+ }
+#endif
+}