sdl: use exp scale for rumble power
Better sensitivity for low power values. Issue #707
This commit is contained in:
parent
9070c246d4
commit
55600c40a9
|
@ -189,6 +189,10 @@ public:
|
|||
return GamepadDevice::gamepad_axis_input(code, value);
|
||||
}
|
||||
|
||||
u16 getRumbleIntensity(float power) {
|
||||
return (u16)std::min(power * 65535.f / std::pow(1.06f, 100.f - rumblePower), 65535.f);
|
||||
}
|
||||
|
||||
void rumble(float power, float inclination, u32 duration_ms) override
|
||||
{
|
||||
if (rumbleEnabled)
|
||||
|
@ -196,7 +200,7 @@ public:
|
|||
vib_inclination = inclination * power;
|
||||
vib_stop_time = os_GetSeconds() + duration_ms / 1000.0;
|
||||
|
||||
Uint16 intensity = (Uint16)std::min(power * rumblePower * 65535.f / 100.f, 65535.f);
|
||||
u16 intensity = getRumbleIntensity(power);
|
||||
SDL_JoystickRumble(sdl_joystick, intensity, intensity, duration_ms);
|
||||
}
|
||||
}
|
||||
|
@ -211,7 +215,7 @@ public:
|
|||
vib_inclination = 0;
|
||||
else
|
||||
{
|
||||
Uint16 intensity = (Uint16)std::min(vib_inclination * rem_time * 65535.f * rumblePower / 100.f, 65535.f);
|
||||
u16 intensity = getRumbleIntensity(vib_inclination * rem_time);
|
||||
SDL_JoystickRumble(sdl_joystick, intensity, intensity, rem_time);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue