|
|
@@ -652,12 +652,27 @@ bool SDLDriver::IsVibrationEnabled(const PadIdentifier& identifier) {
|
|
|
}
|
|
|
|
|
|
void SDLDriver::SendVibrations() {
|
|
|
+ std::vector<VibrationRequest> filtered_vibrations{};
|
|
|
while (!vibration_queue.Empty()) {
|
|
|
VibrationRequest request;
|
|
|
vibration_queue.Pop(request);
|
|
|
const auto joystick = GetSDLJoystickByGUID(request.identifier.guid.RawString(),
|
|
|
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);
|
|
|
}
|
|
|
}
|
|
|
|