diff options
Diffstat (limited to 'src/input_common/drivers/gc_adapter.cpp')
| -rw-r--r-- | src/input_common/drivers/gc_adapter.cpp | 75 |
1 files changed, 63 insertions, 12 deletions
diff --git a/src/input_common/drivers/gc_adapter.cpp b/src/input_common/drivers/gc_adapter.cpp index 4a56abb99..4fb6ab5af 100644 --- a/src/input_common/drivers/gc_adapter.cpp +++ b/src/input_common/drivers/gc_adapter.cpp | |||
| @@ -150,7 +150,10 @@ void GCAdapter::UpdatePadType(std::size_t port, ControllerTypes pad_type) { | |||
| 150 | return; | 150 | return; |
| 151 | } | 151 | } |
| 152 | // Device changed reset device and set new type | 152 | // Device changed reset device and set new type |
| 153 | pads[port] = {}; | 153 | pads[port].axis_origin = {}; |
| 154 | pads[port].reset_origin_counter = {}; | ||
| 155 | pads[port].enable_vibration = {}; | ||
| 156 | pads[port].rumble_amplitude = {}; | ||
| 154 | pads[port].type = pad_type; | 157 | pads[port].type = pad_type; |
| 155 | } | 158 | } |
| 156 | 159 | ||
| @@ -396,12 +399,11 @@ std::vector<Common::ParamPackage> GCAdapter::GetInputDevices() const { | |||
| 396 | if (!DeviceConnected(port)) { | 399 | if (!DeviceConnected(port)) { |
| 397 | continue; | 400 | continue; |
| 398 | } | 401 | } |
| 399 | const std::string name = fmt::format("Gamecube Controller {}", port + 1); | 402 | Common::ParamPackage identifier{}; |
| 400 | devices.emplace_back(Common::ParamPackage{ | 403 | identifier.Set("engine", GetEngineName()); |
| 401 | {"engine", "gcpad"}, | 404 | identifier.Set("display", fmt::format("Gamecube Controller {}", port + 1)); |
| 402 | {"display", std::move(name)}, | 405 | identifier.Set("port", static_cast<int>(port)); |
| 403 | {"port", std::to_string(port)}, | 406 | devices.emplace_back(identifier); |
| 404 | }); | ||
| 405 | } | 407 | } |
| 406 | return devices; | 408 | return devices; |
| 407 | } | 409 | } |
| @@ -431,7 +433,8 @@ ButtonMapping GCAdapter::GetButtonMappingForDevice(const Common::ParamPackage& p | |||
| 431 | 433 | ||
| 432 | ButtonMapping mapping{}; | 434 | ButtonMapping mapping{}; |
| 433 | for (const auto& [switch_button, gcadapter_button] : switch_to_gcadapter_button) { | 435 | for (const auto& [switch_button, gcadapter_button] : switch_to_gcadapter_button) { |
| 434 | Common::ParamPackage button_params({{"engine", "gcpad"}}); | 436 | Common::ParamPackage button_params{}; |
| 437 | button_params.Set("engine", GetEngineName()); | ||
| 435 | button_params.Set("port", params.Get("port", 0)); | 438 | button_params.Set("port", params.Get("port", 0)); |
| 436 | button_params.Set("button", static_cast<int>(gcadapter_button)); | 439 | button_params.Set("button", static_cast<int>(gcadapter_button)); |
| 437 | mapping.insert_or_assign(switch_button, std::move(button_params)); | 440 | mapping.insert_or_assign(switch_button, std::move(button_params)); |
| @@ -444,7 +447,8 @@ ButtonMapping GCAdapter::GetButtonMappingForDevice(const Common::ParamPackage& p | |||
| 444 | {Settings::NativeButton::ZR, PadButton::TriggerR, PadAxes::TriggerRight}, | 447 | {Settings::NativeButton::ZR, PadButton::TriggerR, PadAxes::TriggerRight}, |
| 445 | }; | 448 | }; |
| 446 | for (const auto& [switch_button, gcadapter_buton, gcadapter_axis] : switch_to_gcadapter_axis) { | 449 | for (const auto& [switch_button, gcadapter_buton, gcadapter_axis] : switch_to_gcadapter_axis) { |
| 447 | Common::ParamPackage button_params({{"engine", "gcpad"}}); | 450 | Common::ParamPackage button_params{}; |
| 451 | button_params.Set("engine", GetEngineName()); | ||
| 448 | button_params.Set("port", params.Get("port", 0)); | 452 | button_params.Set("port", params.Get("port", 0)); |
| 449 | button_params.Set("button", static_cast<s32>(gcadapter_buton)); | 453 | button_params.Set("button", static_cast<s32>(gcadapter_buton)); |
| 450 | button_params.Set("axis", static_cast<s32>(gcadapter_axis)); | 454 | button_params.Set("axis", static_cast<s32>(gcadapter_axis)); |
| @@ -463,13 +467,13 @@ AnalogMapping GCAdapter::GetAnalogMappingForDevice(const Common::ParamPackage& p | |||
| 463 | 467 | ||
| 464 | AnalogMapping mapping = {}; | 468 | AnalogMapping mapping = {}; |
| 465 | Common::ParamPackage left_analog_params; | 469 | Common::ParamPackage left_analog_params; |
| 466 | left_analog_params.Set("engine", "gcpad"); | 470 | left_analog_params.Set("engine", GetEngineName()); |
| 467 | left_analog_params.Set("port", params.Get("port", 0)); | 471 | left_analog_params.Set("port", params.Get("port", 0)); |
| 468 | left_analog_params.Set("axis_x", static_cast<int>(PadAxes::StickX)); | 472 | left_analog_params.Set("axis_x", static_cast<int>(PadAxes::StickX)); |
| 469 | left_analog_params.Set("axis_y", static_cast<int>(PadAxes::StickY)); | 473 | left_analog_params.Set("axis_y", static_cast<int>(PadAxes::StickY)); |
| 470 | mapping.insert_or_assign(Settings::NativeAnalog::LStick, std::move(left_analog_params)); | 474 | mapping.insert_or_assign(Settings::NativeAnalog::LStick, std::move(left_analog_params)); |
| 471 | Common::ParamPackage right_analog_params; | 475 | Common::ParamPackage right_analog_params; |
| 472 | right_analog_params.Set("engine", "gcpad"); | 476 | right_analog_params.Set("engine", GetEngineName()); |
| 473 | right_analog_params.Set("port", params.Get("port", 0)); | 477 | right_analog_params.Set("port", params.Get("port", 0)); |
| 474 | right_analog_params.Set("axis_x", static_cast<int>(PadAxes::SubstickX)); | 478 | right_analog_params.Set("axis_x", static_cast<int>(PadAxes::SubstickX)); |
| 475 | right_analog_params.Set("axis_y", static_cast<int>(PadAxes::SubstickY)); | 479 | right_analog_params.Set("axis_y", static_cast<int>(PadAxes::SubstickY)); |
| @@ -477,9 +481,56 @@ AnalogMapping GCAdapter::GetAnalogMappingForDevice(const Common::ParamPackage& p | |||
| 477 | return mapping; | 481 | return mapping; |
| 478 | } | 482 | } |
| 479 | 483 | ||
| 484 | std::string GCAdapter::GetUIButtonName(const Common::ParamPackage& params) const { | ||
| 485 | PadButton button = static_cast<PadButton>(params.Get("button", 0)); | ||
| 486 | switch (button) { | ||
| 487 | case PadButton::ButtonLeft: | ||
| 488 | return "left"; | ||
| 489 | break; | ||
| 490 | case PadButton::ButtonRight: | ||
| 491 | return "right"; | ||
| 492 | break; | ||
| 493 | case PadButton::ButtonDown: | ||
| 494 | return "down"; | ||
| 495 | break; | ||
| 496 | case PadButton::ButtonUp: | ||
| 497 | return "up"; | ||
| 498 | break; | ||
| 499 | case PadButton::TriggerZ: | ||
| 500 | return "Z"; | ||
| 501 | break; | ||
| 502 | case PadButton::TriggerR: | ||
| 503 | return "R"; | ||
| 504 | break; | ||
| 505 | case PadButton::TriggerL: | ||
| 506 | return "L"; | ||
| 507 | break; | ||
| 508 | case PadButton::ButtonA: | ||
| 509 | return "A"; | ||
| 510 | break; | ||
| 511 | case PadButton::ButtonB: | ||
| 512 | return "B"; | ||
| 513 | break; | ||
| 514 | case PadButton::ButtonX: | ||
| 515 | return "X"; | ||
| 516 | break; | ||
| 517 | case PadButton::ButtonY: | ||
| 518 | return "Y"; | ||
| 519 | break; | ||
| 520 | case PadButton::ButtonStart: | ||
| 521 | return "start"; | ||
| 522 | break; | ||
| 523 | default: | ||
| 524 | return "Unkown GC"; | ||
| 525 | } | ||
| 526 | } | ||
| 527 | |||
| 480 | std::string GCAdapter::GetUIName(const Common::ParamPackage& params) const { | 528 | std::string GCAdapter::GetUIName(const Common::ParamPackage& params) const { |
| 481 | if (params.Has("button")) { | 529 | if (params.Has("button")) { |
| 482 | return fmt::format("Button {}", params.Get("button", 0)); | 530 | return fmt::format("Button {}", GetUIButtonName(params)); |
| 531 | } | ||
| 532 | if (params.Has("axis")) { | ||
| 533 | return fmt::format("Axis {}", params.Get("axis",0)); | ||
| 483 | } | 534 | } |
| 484 | 535 | ||
| 485 | return "Bad GC Adapter"; | 536 | return "Bad GC Adapter"; |