Răsfoiți Sursa

Fix for always firing triggers on some controllers, trigger threshold more universal

Ameer 6 ani în urmă
părinte
comite
d00972fce1

+ 2 - 4
src/input_common/gcadapter/gc_adapter.cpp

@@ -156,14 +156,12 @@ void Adapter::Read() {
                     pads[port].axis_value = pads[port].substick_y;
                     pad_queue[port].Push(pads[port]);
                 }
-                if (pads[port].trigger_left > pads[port].TRIGGER_CENTER + pads[port].THRESHOLD ||
-                    pads[port].trigger_left < pads[port].TRIGGER_CENTER - pads[port].THRESHOLD) {
+                if (pads[port].trigger_left > pads[port].TRIGGER_THRESHOLD) {
                     pads[port].axis = GCAdapter::PadAxes::TriggerLeft;
                     pads[port].axis_value = pads[port].trigger_left;
                     pad_queue[port].Push(pads[port]);
                 }
-                if (pads[port].trigger_right > pads[port].TRIGGER_CENTER + pads[port].THRESHOLD ||
-                    pads[port].trigger_right < pads[port].TRIGGER_CENTER - pads[port].THRESHOLD) {
+                if (pads[port].trigger_right > pads[port].TRIGGER_THRESHOLD) {
                     pads[port].axis = GCAdapter::PadAxes::TriggerRight;
                     pads[port].axis_value = pads[port].trigger_right;
                     pad_queue[port].Push(pads[port]);

+ 3 - 1
src/input_common/gcadapter/gc_adapter.h

@@ -63,9 +63,11 @@ struct GCPadStatus {
     static constexpr u8 C_STICK_CENTER_X = 0x80;
     static constexpr u8 C_STICK_CENTER_Y = 0x80;
     static constexpr u8 C_STICK_RADIUS = 0x7f;
-    static constexpr u8 TRIGGER_CENTER = 20;
     static constexpr u8 THRESHOLD = 10;
 
+    // 256/4, at least a quarter press to count as a press. For polling mostly
+    static constexpr u8 TRIGGER_THRESHOLD = 64;
+
     u8 port{};
     PadAxes axis{PadAxes::Undefined};
     u8 axis_value{255};