Skip to content

Commit c49e0de

Browse files
committed
InputManager: use ImpulseVibration settings for trigger vibration
1 parent e051046 commit c49e0de

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

src/input_manager.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)