mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-20 22:16:49 +01:00
Delay delivery of the pause button release on MFI controllers so it doesn't happen in the same frame as the button press
This commit is contained in:
parent
92847022f5
commit
129431b4f4
@ -31,6 +31,7 @@
|
|||||||
#include "SDL_joystick.h"
|
#include "SDL_joystick.h"
|
||||||
#include "SDL_hints.h"
|
#include "SDL_hints.h"
|
||||||
#include "SDL_stdinc.h"
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_timer.h"
|
||||||
#include "../SDL_sysjoystick.h"
|
#include "../SDL_sysjoystick.h"
|
||||||
#include "../SDL_joystick_c.h"
|
#include "../SDL_joystick_c.h"
|
||||||
#include "../steam/SDL_steamcontroller.h"
|
#include "../steam/SDL_steamcontroller.h"
|
||||||
@ -559,6 +560,8 @@ SDL_SYS_MFIJoystickUpdate(SDL_Joystick * joystick)
|
|||||||
Uint8 hatstate = SDL_HAT_CENTERED;
|
Uint8 hatstate = SDL_HAT_CENTERED;
|
||||||
int i;
|
int i;
|
||||||
int updateplayerindex = 0;
|
int updateplayerindex = 0;
|
||||||
|
const Uint8 pausebutton = joystick->nbuttons - 1; /* The pause button is always last. */
|
||||||
|
const Uint32 PAUSE_RELEASE_DELAY_MS = 100;
|
||||||
|
|
||||||
if (controller.extendedGamepad) {
|
if (controller.extendedGamepad) {
|
||||||
GCExtendedGamepad *gamepad = controller.extendedGamepad;
|
GCExtendedGamepad *gamepad = controller.extendedGamepad;
|
||||||
@ -647,17 +650,21 @@ SDL_SYS_MFIJoystickUpdate(SDL_Joystick * joystick)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < joystick->hwdata->num_pause_presses; i++) {
|
for (i = 0; i < joystick->hwdata->num_pause_presses; i++) {
|
||||||
/* The pause button is always last. */
|
|
||||||
Uint8 pausebutton = joystick->nbuttons - 1;
|
|
||||||
|
|
||||||
SDL_PrivateJoystickButton(joystick, pausebutton, SDL_PRESSED);
|
SDL_PrivateJoystickButton(joystick, pausebutton, SDL_PRESSED);
|
||||||
SDL_PrivateJoystickButton(joystick, pausebutton, SDL_RELEASED);
|
joystick->hwdata->pause_button_down_time = SDL_GetTicks();
|
||||||
|
if (!joystick->hwdata->pause_button_down_time) {
|
||||||
|
joystick->hwdata->pause_button_down_time = 1;
|
||||||
|
}
|
||||||
updateplayerindex = YES;
|
updateplayerindex = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
joystick->hwdata->num_pause_presses = 0;
|
joystick->hwdata->num_pause_presses = 0;
|
||||||
|
|
||||||
|
if (joystick->hwdata->pause_button_down_time &&
|
||||||
|
SDL_TICKS_PASSED(SDL_GetTicks(), joystick->hwdata->pause_button_down_time + PAUSE_RELEASE_DELAY_MS)) {
|
||||||
|
SDL_PrivateJoystickButton(joystick, pausebutton, SDL_RELEASED);
|
||||||
|
joystick->hwdata->pause_button_down_time = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (updateplayerindex && controller.playerIndex == -1) {
|
if (updateplayerindex && controller.playerIndex == -1) {
|
||||||
BOOL usedPlayerIndexSlots[4] = {NO, NO, NO, NO};
|
BOOL usedPlayerIndexSlots[4] = {NO, NO, NO, NO};
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ typedef struct joystick_hwdata
|
|||||||
|
|
||||||
GCController __unsafe_unretained *controller;
|
GCController __unsafe_unretained *controller;
|
||||||
int num_pause_presses;
|
int num_pause_presses;
|
||||||
|
Uint32 pause_button_down_time;
|
||||||
|
|
||||||
char *name;
|
char *name;
|
||||||
SDL_Joystick *joystick;
|
SDL_Joystick *joystick;
|
||||||
|
Loading…
Reference in New Issue
Block a user