Fix weak and strong joy vibration being swapped

This commit is contained in:
Nintorch
2025-10-03 11:08:39 +05:00
parent ba0da90ba6
commit e5ecc392c9

View File

@ -122,13 +122,19 @@ void JoypadSDL::process_events() {
SDL_Joystick *sdl_joy = SDL_GetJoystickFromID(joypads[i].sdl_instance_idx); SDL_Joystick *sdl_joy = SDL_GetJoystickFromID(joypads[i].sdl_instance_idx);
Vector2 strength = Input::get_singleton()->get_joy_vibration_strength(i); Vector2 strength = Input::get_singleton()->get_joy_vibration_strength(i);
// If the vibration was requested to start, SDL_RumbleJoystick will start it. /*
// If the vibration was requested to stop, strength and duration will be 0, so SDL will stop the rumble. If the vibration was requested to start, SDL_RumbleJoystick will start it.
If the vibration was requested to stop, strength and duration will be 0, so SDL will stop the rumble.
Here strength.y goes first and then strength.x, because Input.get_joy_vibration_strength().x
is vibration's weak magnitude (high frequency rumble), and .y is strong magnitude (low frequency rumble),
SDL_RumbleJoystick takes low frequency rumble first and then high frequency rumble.
*/
SDL_RumbleJoystick( SDL_RumbleJoystick(
sdl_joy, sdl_joy,
// Rumble strength goes from 0 to 0xFFFF // Rumble strength goes from 0 to 0xFFFF
strength.x * UINT16_MAX,
strength.y * UINT16_MAX, strength.y * UINT16_MAX,
strength.x * UINT16_MAX,
Input::get_singleton()->get_joy_vibration_duration(i) * 1000); Input::get_singleton()->get_joy_vibration_duration(i) * 1000);
} }
} }