mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-27 08:05:41 +00:00
CommonHostInterface: Update rumble every frame regardless of change
Fixes SDL rumble cutting off early when a game sends the same motor strength values every frame over a long duration.
This commit is contained in:
parent
4cc2883224
commit
d860c14267
|
@ -1055,16 +1055,10 @@ void CommonHostInterface::UpdateControllerRumble()
|
||||||
if (!controller)
|
if (!controller)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bool changed = false;
|
|
||||||
for (u32 i = 0; i < rumble.num_motors; i++)
|
for (u32 i = 0; i < rumble.num_motors; i++)
|
||||||
{
|
rumble.last_strength[i] = controller->GetVibrationMotorStrength(i);
|
||||||
const float strength = controller->GetVibrationMotorStrength(i);
|
|
||||||
changed |= (strength != rumble.last_strength[i]);
|
|
||||||
rumble.last_strength[i] = strength;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed)
|
rumble.update_callback(rumble.last_strength.data(), rumble.num_motors);
|
||||||
rumble.update_callback(rumble.last_strength.data(), rumble.num_motors);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1072,15 +1066,10 @@ void CommonHostInterface::StopControllerRumble()
|
||||||
{
|
{
|
||||||
for (ControllerRumbleState& rumble : m_controller_vibration_motors)
|
for (ControllerRumbleState& rumble : m_controller_vibration_motors)
|
||||||
{
|
{
|
||||||
bool changed = false;
|
|
||||||
for (u32 i = 0; i < rumble.num_motors; i++)
|
for (u32 i = 0; i < rumble.num_motors; i++)
|
||||||
{
|
|
||||||
changed |= (rumble.last_strength[i] != 0.0f);
|
|
||||||
rumble.last_strength[i] = 0.0f;
|
rumble.last_strength[i] = 0.0f;
|
||||||
}
|
|
||||||
|
|
||||||
if (changed)
|
rumble.update_callback(rumble.last_strength.data(), rumble.num_motors);
|
||||||
rumble.update_callback(rumble.last_strength.data(), rumble.num_motors);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -710,7 +710,7 @@ void SDLControllerInterface::SetControllerRumbleStrength(int controller_index, c
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// we'll update before this duration is elapsed
|
// we'll update before this duration is elapsed
|
||||||
static constexpr u32 DURATION = 1000;
|
static constexpr u32 DURATION = 65535; // SDL_MAX_RUMBLE_DURATION_MS
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 9)
|
#if SDL_VERSION_ATLEAST(2, 0, 9)
|
||||||
if (it->use_game_controller_rumble)
|
if (it->use_game_controller_rumble)
|
||||||
|
|
Loading…
Reference in a new issue