Merge yuzu-emu#12769
This commit is contained in:
		| @@ -110,7 +110,11 @@ void EmulatedController::ReloadFromSettings() { | ||||
|         original_npad_type = npad_type; | ||||
|     } | ||||
|  | ||||
|     SetPollingMode(EmulatedDeviceIndex::RightIndex, Common::Input::PollingMode::Active); | ||||
|     // Disable special features before disconnecting | ||||
|     if (controller.right_polling_mode != Common::Input::PollingMode::Active) { | ||||
|         SetPollingMode(EmulatedDeviceIndex::RightIndex, Common::Input::PollingMode::Active); | ||||
|     } | ||||
|  | ||||
|     Disconnect(); | ||||
|     if (player.connected) { | ||||
|         Connect(); | ||||
| @@ -1241,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; | ||||
| @@ -1272,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
	
	Block a user