From cc5abc8fc936681ad6056e8cfb249016044cfdcf Mon Sep 17 00:00:00 2001 From: GhostlyDark <31742919+GhostlyDark@users.noreply.github.com> Date: Sat, 28 Dec 2024 18:09:43 +0100 Subject: [PATCH] Update rumble functions for SDL v2.0.18+ --- src/pc/controller/controller_sdl.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/pc/controller/controller_sdl.c b/src/pc/controller/controller_sdl.c index a71a82ebcb..5230e2f3bd 100644 --- a/src/pc/controller/controller_sdl.c +++ b/src/pc/controller/controller_sdl.c @@ -263,13 +263,30 @@ static void controller_sdl_read(OSContPad *pad) { } static void controller_sdl_rumble_play(f32 strength, f32 length) { - if (sdl_haptic) + if (sdl_haptic) { SDL_HapticRumblePlay(sdl_haptic, strength, (u32)(length * 1000.0f)); + } + else { +#if SDL_VERSION_ATLEAST(2,0,18) + uint16_t scaled_strength = strength * pow(2, 16) - 1; + if (SDL_GameControllerHasRumble(sdl_cntrl) == SDL_TRUE) { + SDL_GameControllerRumble(sdl_cntrl, scaled_strength, scaled_strength, (u32)(length * 1000.0f)); + } +#endif + } } static void controller_sdl_rumble_stop(void) { - if (sdl_haptic) + if (sdl_haptic) { SDL_HapticRumbleStop(sdl_haptic); + } + else { +#if SDL_VERSION_ATLEAST(2,0,18) + if (SDL_GameControllerHasRumble(sdl_cntrl) == SDL_TRUE) { + SDL_GameControllerRumble(sdl_cntrl, 0, 0, 0); + } +#endif + } } static u32 controller_sdl_rawkey(void) {