core: hid: Skip duplicated vibrations
This commit is contained in:
parent
3b1c2896d9
commit
ad4622da2c
|
@ -1245,7 +1245,12 @@ bool EmulatedController::SetVibration(DeviceIndex device_index, const VibrationV
|
|||
return false;
|
||||
}
|
||||
|
||||
last_vibration_value = vibration;
|
||||
// Skip duplicated vibrations
|
||||
if (last_vibration_value[index] == vibration) {
|
||||
return Settings::values.vibration_enabled.GetValue();
|
||||
}
|
||||
|
||||
last_vibration_value[index] = vibration;
|
||||
|
||||
if (!Settings::values.vibration_enabled) {
|
||||
return false;
|
||||
|
@ -1276,7 +1281,10 @@ bool EmulatedController::SetVibration(DeviceIndex device_index, const VibrationV
|
|||
}
|
||||
|
||||
VibrationValue EmulatedController::GetActualVibrationValue(DeviceIndex device_index) const {
|
||||
return last_vibration_value;
|
||||
if (device_index >= DeviceIndex::MaxDeviceIndex) {
|
||||
return Core::HID::DEFAULT_VIBRATION_VALUE;
|
||||
}
|
||||
return last_vibration_value[static_cast<std::size_t>(device_index)];
|
||||
}
|
||||
|
||||
bool EmulatedController::IsVibrationEnabled(std::size_t device_index) {
|
||||
|
|
|
@ -581,7 +581,8 @@ private:
|
|||
f32 motion_sensitivity{Core::HID::MotionInput::IsAtRestStandard};
|
||||
u32 turbo_button_state{0};
|
||||
std::size_t nfc_handles{0};
|
||||
VibrationValue last_vibration_value{DEFAULT_VIBRATION_VALUE};
|
||||
std::array<VibrationValue, 2> last_vibration_value{DEFAULT_VIBRATION_VALUE,
|
||||
DEFAULT_VIBRATION_VALUE};
|
||||
|
||||
// Temporary values to avoid doing changes while the controller is in configuring mode
|
||||
NpadStyleIndex tmp_npad_type{NpadStyleIndex::None};
|
||||
|
|
|
@ -639,6 +639,15 @@ struct VibrationValue {
|
|||
f32 low_frequency{};
|
||||
f32 high_amplitude{};
|
||||
f32 high_frequency{};
|
||||
bool operator==(const VibrationValue& b) {
|
||||
if (low_amplitude != b.low_amplitude || high_amplitude != b.high_amplitude) {
|
||||
return false;
|
||||
}
|
||||
if (low_frequency != b.low_amplitude || high_frequency != b.high_frequency) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
static_assert(sizeof(VibrationValue) == 0x10, "VibrationValue has incorrect size.");
|
||||
|
||||
|
|
Reference in New Issue