mirror of https://github.com/encounter/SDL.git
Start rumbling once a raw input controller has been correlated
Fixes https://github.com/libsdl-org/SDL/issues/5351
This commit is contained in:
parent
3167ba342d
commit
1868c5b521
|
@ -886,17 +886,18 @@ SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 h
|
||||||
result = joystick->driver->Rumble(joystick, low_frequency_rumble, high_frequency_rumble);
|
result = joystick->driver->Rumble(joystick, low_frequency_rumble, high_frequency_rumble);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save the rumble value regardless of success, so we don't spam the driver */
|
if (result == 0) {
|
||||||
joystick->low_frequency_rumble = low_frequency_rumble;
|
joystick->low_frequency_rumble = low_frequency_rumble;
|
||||||
joystick->high_frequency_rumble = high_frequency_rumble;
|
joystick->high_frequency_rumble = high_frequency_rumble;
|
||||||
|
|
||||||
if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
|
if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
|
||||||
joystick->rumble_expiration = SDL_GetTicks() + SDL_min(duration_ms, SDL_MAX_RUMBLE_DURATION_MS);
|
joystick->rumble_expiration = SDL_GetTicks() + SDL_min(duration_ms, SDL_MAX_RUMBLE_DURATION_MS);
|
||||||
if (!joystick->rumble_expiration) {
|
if (!joystick->rumble_expiration) {
|
||||||
joystick->rumble_expiration = 1;
|
joystick->rumble_expiration = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
joystick->rumble_expiration = 0;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
joystick->rumble_expiration = 0;
|
|
||||||
}
|
}
|
||||||
SDL_UnlockJoysticks();
|
SDL_UnlockJoysticks();
|
||||||
|
|
||||||
|
@ -920,17 +921,18 @@ SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 ri
|
||||||
result = joystick->driver->RumbleTriggers(joystick, left_rumble, right_rumble);
|
result = joystick->driver->RumbleTriggers(joystick, left_rumble, right_rumble);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save the rumble value regardless of success, so we don't spam the driver */
|
if (result == 0) {
|
||||||
joystick->left_trigger_rumble = left_rumble;
|
joystick->left_trigger_rumble = left_rumble;
|
||||||
joystick->right_trigger_rumble = right_rumble;
|
joystick->right_trigger_rumble = right_rumble;
|
||||||
|
|
||||||
if ((left_rumble || right_rumble) && duration_ms) {
|
if ((left_rumble || right_rumble) && duration_ms) {
|
||||||
joystick->trigger_rumble_expiration = SDL_GetTicks() + SDL_min(duration_ms, SDL_MAX_RUMBLE_DURATION_MS);
|
joystick->trigger_rumble_expiration = SDL_GetTicks() + SDL_min(duration_ms, SDL_MAX_RUMBLE_DURATION_MS);
|
||||||
if (!joystick->trigger_rumble_expiration) {
|
if (!joystick->trigger_rumble_expiration) {
|
||||||
joystick->trigger_rumble_expiration = 1;
|
joystick->trigger_rumble_expiration = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
joystick->trigger_rumble_expiration = 0;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
joystick->trigger_rumble_expiration = 0;
|
|
||||||
}
|
}
|
||||||
SDL_UnlockJoysticks();
|
SDL_UnlockJoysticks();
|
||||||
|
|
||||||
|
|
|
@ -1295,6 +1295,13 @@ RAWINPUT_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uin
|
||||||
}
|
}
|
||||||
#endif /* SDL_JOYSTICK_RAWINPUT_XINPUT */
|
#endif /* SDL_JOYSTICK_RAWINPUT_XINPUT */
|
||||||
|
|
||||||
|
if (!rumbled) {
|
||||||
|
#if defined(SDL_JOYSTICK_RAWINPUT_WGI) || defined(SDL_JOYSTICK_RAWINPUT_XINPUT)
|
||||||
|
return SDL_SetError("Controller isn't correlated yet, try hitting a button first");
|
||||||
|
#else
|
||||||
|
return SDL_Unsupported();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue