Merge pull request #9939 from german77/vibration

input_common: sdl: Only send last vibration command
This commit is contained in:
liamwhite 2023-03-13 13:45:40 -04:00 committed by GitHub
commit 8870fae674
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -652,12 +652,27 @@ bool SDLDriver::IsVibrationEnabled(const PadIdentifier& identifier) {
} }
void SDLDriver::SendVibrations() { void SDLDriver::SendVibrations() {
std::vector<VibrationRequest> filtered_vibrations{};
while (!vibration_queue.Empty()) { while (!vibration_queue.Empty()) {
VibrationRequest request; VibrationRequest request;
vibration_queue.Pop(request); vibration_queue.Pop(request);
const auto joystick = GetSDLJoystickByGUID(request.identifier.guid.RawString(), const auto joystick = GetSDLJoystickByGUID(request.identifier.guid.RawString(),
static_cast<int>(request.identifier.port)); static_cast<int>(request.identifier.port));
joystick->RumblePlay(request.vibration); const auto it = std::find_if(filtered_vibrations.begin(), filtered_vibrations.end(),
[request](VibrationRequest vibration) {
return vibration.identifier == request.identifier;
});
if (it == filtered_vibrations.end()) {
filtered_vibrations.push_back(std::move(request));
continue;
}
*it = request;
}
for (const auto& vibration : filtered_vibrations) {
const auto joystick = GetSDLJoystickByGUID(vibration.identifier.guid.RawString(),
static_cast<int>(vibration.identifier.port));
joystick->RumblePlay(vibration.vibration);
} }
} }