Add options to control gamepad autoselection heuristics
Also move gamepad type selection to the input tab while we're here
This commit is contained in:
parent
97c921629a
commit
6ea836c511
5 changed files with 133 additions and 36 deletions
|
|
@ -420,6 +420,8 @@ namespace config {
|
|||
platf::supported_gamepads().front().size(),
|
||||
}, // Default gamepad
|
||||
true, // back as touchpad click enabled (manual DS4 only)
|
||||
true, // client gamepads with motion events are emulated as DS4
|
||||
true, // client gamepads with touchpads are emulated as DS4
|
||||
|
||||
true, // keyboard enabled
|
||||
true, // mouse enabled
|
||||
|
|
@ -1048,6 +1050,8 @@ namespace config {
|
|||
|
||||
string_restricted_f(vars, "gamepad"s, input.gamepad, platf::supported_gamepads());
|
||||
bool_f(vars, "ds4_back_as_touchpad_click", input.ds4_back_as_touchpad_click);
|
||||
bool_f(vars, "motion_as_ds4", input.motion_as_ds4);
|
||||
bool_f(vars, "touchpad_as_ds4", input.touchpad_as_ds4);
|
||||
|
||||
bool_f(vars, "mouse", input.mouse);
|
||||
bool_f(vars, "keyboard", input.keyboard);
|
||||
|
|
|
|||
|
|
@ -113,6 +113,8 @@ namespace config {
|
|||
|
||||
std::string gamepad;
|
||||
bool ds4_back_as_touchpad_click;
|
||||
bool motion_as_ds4;
|
||||
bool touchpad_as_ds4;
|
||||
|
||||
bool keyboard;
|
||||
bool mouse;
|
||||
|
|
|
|||
|
|
@ -1188,11 +1188,11 @@ namespace platf {
|
|||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be Xbox 360 controller (auto-selected by client-reported type)"sv;
|
||||
selectedGamepadType = Xbox360Wired;
|
||||
}
|
||||
else if (metadata.capabilities & (LI_CCAP_ACCEL | LI_CCAP_GYRO)) {
|
||||
else if (config::input.motion_as_ds4 && (metadata.capabilities & (LI_CCAP_ACCEL | LI_CCAP_GYRO))) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be DualShock 4 controller (auto-selected by motion sensor presence)"sv;
|
||||
selectedGamepadType = DualShock4Wired;
|
||||
}
|
||||
else if (metadata.capabilities & LI_CCAP_TOUCHPAD) {
|
||||
else if (config::input.touchpad_as_ds4 && (metadata.capabilities & LI_CCAP_TOUCHPAD)) {
|
||||
BOOST_LOG(info) << "Gamepad " << id.globalIndex << " will be DualShock 4 controller (auto-selected by touchpad presence)"sv;
|
||||
selectedGamepadType = DualShock4Wired;
|
||||
}
|
||||
|
|
@ -1201,6 +1201,26 @@ namespace platf {
|
|||
selectedGamepadType = Xbox360Wired;
|
||||
}
|
||||
|
||||
if (selectedGamepadType == Xbox360Wired) {
|
||||
if (metadata.capabilities & (LI_CCAP_ACCEL | LI_CCAP_GYRO)) {
|
||||
BOOST_LOG(warning) << "Gamepad " << id.globalIndex << " has motion sensors, but they are not usable when emulating an Xbox 360 controller"sv;
|
||||
}
|
||||
if (metadata.capabilities & LI_CCAP_TOUCHPAD) {
|
||||
BOOST_LOG(warning) << "Gamepad " << id.globalIndex << " has a touchpad, but it is not usable when emulating an Xbox 360 controller"sv;
|
||||
}
|
||||
if (metadata.capabilities & LI_CCAP_RGB_LED) {
|
||||
BOOST_LOG(warning) << "Gamepad " << id.globalIndex << " has an RGB LED, but it is not usable when emulating an Xbox 360 controller"sv;
|
||||
}
|
||||
}
|
||||
else if (selectedGamepadType == DualShock4Wired) {
|
||||
if (!(metadata.capabilities & (LI_CCAP_ACCEL | LI_CCAP_GYRO))) {
|
||||
BOOST_LOG(warning) << "Gamepad " << id.globalIndex << " is emulating a DualShock 4 controller, but the client gamepad doesn't have motion sensors active"sv;
|
||||
}
|
||||
if (!(metadata.capabilities & LI_CCAP_TOUCHPAD)) {
|
||||
BOOST_LOG(warning) << "Gamepad " << id.globalIndex << " is emulating a DualShock 4 controller, but the client gamepad doesn't have a touchpad"sv;
|
||||
}
|
||||
}
|
||||
|
||||
return raw->vigem->alloc_gamepad_internal(id, feedback_queue, selectedGamepadType);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue