@@ -461,11 +461,29 @@ class InputManager
461461
462462 void set_vibration (WORD left, WORD right)
463463 {
464- if (primaryControllerIndex != -1 )
464+ if (primaryControllerIndex == -1 )
465+ return ;
466+
467+ std::lock_guard<std::mutex> lock (mtx);
468+ SDL_RumbleGamepad (controllers[primaryControllerIndex], left, right, 1000 );
469+
470+ if (!Settings::ImpulseVibrationMode)
465471 {
466- std::lock_guard<std::mutex> lock (mtx);
467- SDL_RumbleGamepad (controllers[primaryControllerIndex], left, right, 1000 );
468- SDL_RumbleGamepadTriggers (controllers[primaryControllerIndex], left, right, 1000 );
472+ int impulseLeft = float (left);
473+ int impulseRight = float (right);
474+
475+ if (Settings::ImpulseVibrationMode == 2 ) // Swap L/R
476+ {
477+ impulseLeft = float (right);
478+ impulseRight = float (left);
479+ }
480+ else if (Settings::ImpulseVibrationMode == 3 ) // Merge L/R by using whichever is highest
481+ {
482+ impulseLeft = impulseRight = max (left, right);
483+ }
484+ impulseLeft = impulseLeft * Settings::ImpulseVibrationLeftMultiplier;
485+ impulseRight = impulseRight * Settings::ImpulseVibrationRightMultiplier;
486+ SDL_RumbleGamepadTriggers (controllers[primaryControllerIndex], Uint16 (ceil (impulseLeft)), Uint16 (ceil (impulseRight)), 1000 );
469487 }
470488 }
471489
0 commit comments