Compare commits

...

3 Commits

Author SHA1 Message Date
german
32554bc0ae Fix typo 2020-10-05 11:42:33 -05:00
german
defd9c9a6a Address comments 2020-10-05 10:29:26 -05:00
german
be833298a1 Fixes rumble only in one controller 2020-10-05 09:29:58 -05:00
2 changed files with 26 additions and 11 deletions

View File

@@ -673,18 +673,15 @@ void Controller_NPad::VibrateController(const std::vector<u32>& controllers,
return;
}
bool success = true;
for (std::size_t i = 0; i < controllers.size(); ++i) {
if (!connected_controllers[i].is_connected) {
continue;
if (vibrations.size() == 1) {
for (std::size_t i = 0; i < controllers.size(); ++i) {
const std::size_t controller = (controllers[i] >> 8) & 0x7;
success = success && VibratePhysicalController(controller, vibrations[0]);
}
using namespace Settings::NativeButton;
const auto& button_state = buttons[i];
if (button_state[A - BUTTON_HID_BEGIN]) {
if (button_state[A - BUTTON_HID_BEGIN]->SetRumblePlay(
vibrations[0].amp_high, vibrations[0].amp_low, vibrations[0].freq_high,
vibrations[0].freq_low)) {
success = false;
}
} else {
for (std::size_t i = 0; i < vibrations.size(); ++i) {
const std::size_t controller = i / 2;
success = success && VibratePhysicalController(controller, vibrations[i]);
}
}
if (success) {
@@ -692,6 +689,21 @@ void Controller_NPad::VibrateController(const std::vector<u32>& controllers,
}
}
bool Controller_NPad::VibratePhysicalController(std::size_t controller, Vibration vibration) {
if (!connected_controllers[controller].is_connected) {
return true;
}
using namespace Settings::NativeButton;
const auto& button_state = buttons[controller];
const auto controller_type = connected_controllers[controller].type;
const auto use_button = controller_type == NPadControllerType::JoyLeft ? DDown : A;
if (button_state[use_button - BUTTON_HID_BEGIN]) {
return !button_state[use_button - BUTTON_HID_BEGIN]->SetRumblePlay(
vibration.amp_high, vibration.amp_low, vibration.freq_high, vibration.freq_low);
}
return true;
}
Controller_NPad::Vibration Controller_NPad::GetLastVibration() const {
return last_processed_vibration;
}

View File

@@ -128,6 +128,9 @@ public:
void VibrateController(const std::vector<u32>& controllers,
const std::vector<Vibration>& vibrations);
// Vibrates a specific controller
bool VibratePhysicalController(std::size_t controller, Vibration vibration);
Vibration GetLastVibration() const;
std::shared_ptr<Kernel::ReadableEvent> GetStyleSetChangedEvent(u32 npad_id) const;