diff options
| author | 2020-07-07 12:20:59 -0400 | |
|---|---|---|
| committer | 2020-07-07 12:20:59 -0400 | |
| commit | b57475887be5879347d5fda425676d0bd2e2a3d3 (patch) | |
| tree | 92f0b09499d1a7b89d0ec9093bd3be4462871210 /src/input_common | |
| parent | Brace the code! Fix compile error due to class member construction order (diff) | |
| download | yuzu-b57475887be5879347d5fda425676d0bd2e2a3d3.tar.gz yuzu-b57475887be5879347d5fda425676d0bd2e2a3d3.tar.xz yuzu-b57475887be5879347d5fda425676d0bd2e2a3d3.zip | |
Address PR feedback, fix axis button thresholding
Diffstat (limited to 'src/input_common')
| -rw-r--r-- | src/input_common/gcadapter/gc_adapter.cpp | 62 | ||||
| -rw-r--r-- | src/input_common/gcadapter/gc_adapter.h | 3 | ||||
| -rw-r--r-- | src/input_common/gcadapter/gc_poller.cpp | 15 |
3 files changed, 22 insertions, 58 deletions
diff --git a/src/input_common/gcadapter/gc_adapter.cpp b/src/input_common/gcadapter/gc_adapter.cpp index b43b73759..f1c280e2e 100644 --- a/src/input_common/gcadapter/gc_adapter.cpp +++ b/src/input_common/gcadapter/gc_adapter.cpp | |||
| @@ -385,51 +385,25 @@ const std::array<GCState, 4>& Adapter::GetPadState() const { | |||
| 385 | return state; | 385 | return state; |
| 386 | } | 386 | } |
| 387 | 387 | ||
| 388 | int Adapter::GetOriginValue(int port, int axis) { | 388 | int Adapter::GetOriginValue(int port, int axis) const { |
| 389 | // TODO: perhaps place stick statuses into an array in PadStatus | 389 | const auto& status = origin_status[port]; |
| 390 | const PadAxes padaxis = static_cast<PadAxes>(axis); | 390 | |
| 391 | if (padaxis == PadAxes::StickX) { | 391 | switch (static_cast<PadAxes>(axis)) { |
| 392 | return origin_status[port].stick_x; | 392 | case PadAxes::StickX: |
| 393 | return status.stick_x; | ||
| 394 | case PadAxes::StickY: | ||
| 395 | return status.stick_y; | ||
| 396 | case PadAxes::SubstickX: | ||
| 397 | return status.substick_x; | ||
| 398 | case PadAxes::SubstickY: | ||
| 399 | return status.substick_y; | ||
| 400 | case PadAxes::TriggerLeft: | ||
| 401 | return status.trigger_left; | ||
| 402 | case PadAxes::TriggerRight: | ||
| 403 | return status.trigger_right; | ||
| 404 | default: | ||
| 405 | return 0; | ||
| 393 | } | 406 | } |
| 394 | if (padaxis == PadAxes::StickY) { | ||
| 395 | return origin_status[port].stick_y; | ||
| 396 | } | ||
| 397 | if (padaxis == PadAxes::SubstickX) { | ||
| 398 | return origin_status[port].substick_x; | ||
| 399 | } | ||
| 400 | if (padaxis == PadAxes::SubstickY) { | ||
| 401 | return origin_status[port].substick_x; | ||
| 402 | } | ||
| 403 | if (padaxis == PadAxes::TriggerLeft) { | ||
| 404 | return origin_status[port].trigger_left; | ||
| 405 | } | ||
| 406 | if (padaxis == PadAxes::TriggerRight) { | ||
| 407 | return origin_status[port].trigger_right; | ||
| 408 | } | ||
| 409 | return 0; | ||
| 410 | } | ||
| 411 | |||
| 412 | const int Adapter::GetOriginValue(int port, int axis) const { | ||
| 413 | const PadAxes padaxis = static_cast<PadAxes>(axis); | ||
| 414 | if (padaxis == PadAxes::StickX) { | ||
| 415 | return origin_status[port].stick_x; | ||
| 416 | } | ||
| 417 | if (padaxis == PadAxes::StickY) { | ||
| 418 | return origin_status[port].stick_y; | ||
| 419 | } | ||
| 420 | if (padaxis == PadAxes::SubstickX) { | ||
| 421 | return origin_status[port].substick_x; | ||
| 422 | } | ||
| 423 | if (padaxis == PadAxes::SubstickY) { | ||
| 424 | return origin_status[port].substick_x; | ||
| 425 | } | ||
| 426 | if (padaxis == PadAxes::TriggerLeft) { | ||
| 427 | return origin_status[port].trigger_left; | ||
| 428 | } | ||
| 429 | if (padaxis == PadAxes::TriggerRight) { | ||
| 430 | return origin_status[port].trigger_right; | ||
| 431 | } | ||
| 432 | return 0; | ||
| 433 | } | 407 | } |
| 434 | 408 | ||
| 435 | } // namespace GCAdapter | 409 | } // namespace GCAdapter |
diff --git a/src/input_common/gcadapter/gc_adapter.h b/src/input_common/gcadapter/gc_adapter.h index 8b08d667d..cb9d73a8e 100644 --- a/src/input_common/gcadapter/gc_adapter.h +++ b/src/input_common/gcadapter/gc_adapter.h | |||
| @@ -96,8 +96,7 @@ public: | |||
| 96 | std::array<GCState, 4>& GetPadState(); | 96 | std::array<GCState, 4>& GetPadState(); |
| 97 | const std::array<GCState, 4>& GetPadState() const; | 97 | const std::array<GCState, 4>& GetPadState() const; |
| 98 | 98 | ||
| 99 | int GetOriginValue(int port, int axis); | 99 | int GetOriginValue(int port, int axis) const; |
| 100 | const int GetOriginValue(int port, int axis) const; | ||
| 101 | 100 | ||
| 102 | private: | 101 | private: |
| 103 | GCPadStatus GetPadStatus(int port, const std::array<u8, 37>& adapter_payload); | 102 | GCPadStatus GetPadStatus(int port, const std::array<u8, 37>& adapter_payload); |
diff --git a/src/input_common/gcadapter/gc_poller.cpp b/src/input_common/gcadapter/gc_poller.cpp index ed99f98b4..ad321e933 100644 --- a/src/input_common/gcadapter/gc_poller.cpp +++ b/src/input_common/gcadapter/gc_poller.cpp | |||
| @@ -34,13 +34,7 @@ public: | |||
| 34 | explicit GCAxisButton(int port_, int axis_, float threshold_, bool trigger_if_greater_, | 34 | explicit GCAxisButton(int port_, int axis_, float threshold_, bool trigger_if_greater_, |
| 35 | GCAdapter::Adapter* adapter) | 35 | GCAdapter::Adapter* adapter) |
| 36 | : port(port_), axis(axis_), threshold(threshold_), trigger_if_greater(trigger_if_greater_), | 36 | : port(port_), axis(axis_), threshold(threshold_), trigger_if_greater(trigger_if_greater_), |
| 37 | gcadapter(adapter), origin_value(adapter->GetOriginValue(port_, axis_)) { | 37 | gcadapter(adapter), origin_value(adapter->GetOriginValue(port_, axis_)) {} |
| 38 | // L/R triggers range is only in positive direction beginning near 0 | ||
| 39 | // 0.0 threshold equates to near half trigger press, but threshold accounts for variability. | ||
| 40 | if (axis > 3) { | ||
| 41 | threshold *= -0.5; | ||
| 42 | } | ||
| 43 | } | ||
| 44 | 38 | ||
| 45 | bool GetStatus() const override { | 39 | bool GetStatus() const override { |
| 46 | const float current_axis_value = gcadapter->GetPadState()[port].axes.at(axis); | 40 | const float current_axis_value = gcadapter->GetPadState()[port].axes.at(axis); |
| @@ -152,14 +146,11 @@ public: | |||
| 152 | 146 | ||
| 153 | float GetAxis(int axis) const { | 147 | float GetAxis(int axis) const { |
| 154 | std::lock_guard lock{mutex}; | 148 | std::lock_guard lock{mutex}; |
| 149 | const auto origin_value = axis % 2 == 0 ? origin_value_x : origin_value_y; | ||
| 155 | // division is not by a perfect 128 to account for some variance in center location | 150 | // division is not by a perfect 128 to account for some variance in center location |
| 156 | // e.g. my device idled at 131 in X, 120 in Y, and full range of motion was in range | 151 | // e.g. my device idled at 131 in X, 120 in Y, and full range of motion was in range |
| 157 | // [20-230] | 152 | // [20-230] |
| 158 | if (axis % 2 == 0) { | 153 | return (gcadapter->GetPadState()[port].axes.at(axis) - origin_value) / 95.0f; |
| 159 | return (gcadapter->GetPadState()[port].axes.at(axis) - origin_value_x) / 95.0f; | ||
| 160 | } else { | ||
| 161 | return (gcadapter->GetPadState()[port].axes.at(axis) - origin_value_y) / 95.0f; | ||
| 162 | } | ||
| 163 | } | 154 | } |
| 164 | 155 | ||
| 165 | std::pair<float, float> GetAnalog(int axis_x, int axis_y) const { | 156 | std::pair<float, float> GetAnalog(int axis_x, int axis_y) const { |