|
|
@ -59,80 +59,6 @@ void ConfigureVibration::ApplyConfiguration() { |
|
|
ui->checkBoxAccurateVibration->isChecked()); |
|
|
ui->checkBoxAccurateVibration->isChecked()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void ConfigureVibration::SetVibrationDevices(std::size_t player_index) { |
|
|
|
|
|
using namespace Settings::NativeButton; |
|
|
|
|
|
static constexpr std::array<std::array<Settings::NativeButton::Values, 6>, 2> buttons{{ |
|
|
|
|
|
{DLeft, DUp, DRight, DDown, L, ZL}, // Left Buttons
|
|
|
|
|
|
{A, B, X, Y, R, ZR}, // Right Buttons
|
|
|
|
|
|
}}; |
|
|
|
|
|
|
|
|
|
|
|
auto& player = Settings::values.players.GetValue()[player_index]; |
|
|
|
|
|
|
|
|
|
|
|
for (std::size_t device_idx = 0; device_idx < buttons.size(); ++device_idx) { |
|
|
|
|
|
std::unordered_map<std::string, int> params_count; |
|
|
|
|
|
|
|
|
|
|
|
for (const auto button_index : buttons[device_idx]) { |
|
|
|
|
|
const auto& player_button = player.buttons[button_index]; |
|
|
|
|
|
|
|
|
|
|
|
if (params_count.find(player_button) != params_count.end()) { |
|
|
|
|
|
++params_count[player_button]; |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
params_count.insert_or_assign(player_button, 1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const auto it = std::max_element( |
|
|
|
|
|
params_count.begin(), params_count.end(), |
|
|
|
|
|
[](const auto& lhs, const auto& rhs) { return lhs.second < rhs.second; }); |
|
|
|
|
|
|
|
|
|
|
|
auto& vibration_param_str = player.vibrations[device_idx]; |
|
|
|
|
|
vibration_param_str.clear(); |
|
|
|
|
|
|
|
|
|
|
|
if (it->first.empty()) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const auto param = Common::ParamPackage(it->first); |
|
|
|
|
|
|
|
|
|
|
|
const auto engine = param.Get("engine", ""); |
|
|
|
|
|
const auto guid = param.Get("guid", ""); |
|
|
|
|
|
const auto port = param.Get("port", 0); |
|
|
|
|
|
|
|
|
|
|
|
if (engine.empty() || engine == "keyboard" || engine == "mouse" || engine == "tas") { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
vibration_param_str += fmt::format("engine:{}", engine); |
|
|
|
|
|
|
|
|
|
|
|
if (port != 0) { |
|
|
|
|
|
vibration_param_str += fmt::format(",port:{}", port); |
|
|
|
|
|
} |
|
|
|
|
|
if (!guid.empty()) { |
|
|
|
|
|
vibration_param_str += fmt::format(",guid:{}", guid); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (player.vibrations[0] != player.vibrations[1]) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!player.vibrations[0].empty() && |
|
|
|
|
|
player.controller_type != Settings::ControllerType::RightJoycon) { |
|
|
|
|
|
player.vibrations[1].clear(); |
|
|
|
|
|
} else if (!player.vibrations[1].empty() && |
|
|
|
|
|
player.controller_type == Settings::ControllerType::RightJoycon) { |
|
|
|
|
|
player.vibrations[0].clear(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void ConfigureVibration::SetAllVibrationDevices() { |
|
|
|
|
|
// Set vibration devices for all player indices including handheld
|
|
|
|
|
|
for (std::size_t player_idx = 0; player_idx < NUM_PLAYERS + 1; ++player_idx) { |
|
|
|
|
|
SetVibrationDevices(player_idx); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void ConfigureVibration::changeEvent(QEvent* event) { |
|
|
void ConfigureVibration::changeEvent(QEvent* event) { |
|
|
if (event->type() == QEvent::LanguageChange) { |
|
|
if (event->type() == QEvent::LanguageChange) { |
|
|
RetranslateUI(); |
|
|
RetranslateUI(); |
|
|
|