From 23fcaa1bab210c0ab494685c4a3de197dd8268f4 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 1 Oct 2014 20:24:40 -0700 Subject: [PATCH] Add axis scaling support --- libs/limelight-common.jar | Bin 418136 -> 418537 bytes .../binding/input/ControllerHandler.java | 25 ++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/libs/limelight-common.jar b/libs/limelight-common.jar index 4cfafd60d8b25ffab78f8455023f9b7df4d4972f..0348acc13d669b6fa12132b3e7c66957bb28fe05 100644 GIT binary patch delta 1949 zcmca{Nb==TN!|c&W)=|!4h{~6yNetfdAIU1Dugm0p658-Ae7OyKJ0a{aJY!Qw-Zz0 z!4Dly2f}_|5Ll(Tb*t{eEFqzeH7aS--494j-_SC3LdK?mm)Q??o09g zA+1Jp{r)rjpZrgF>;CG^oZ7ADcFeq4UH5$6cgyd2^ZtH59`AC+-QIGg--5$8A0;WQ z*Uzf7HP2_^I-RC$=&W8w+vGP)KmUcRp1UWS*(h`P z;)Mhg)quMt5emD7y1bd*dbKGj2dXY!GC8oZWru_BhhVcSO@`~9O*fG~^tvHWLwK^2 z^MnZp3xzEb&oSOQe<4M5Zi+^%mL(Z#VqF@XUtAOpPh23%sm(2Ri(Fl>V|&5ZdEfW(`ntDC)(!4&e+mq60$R)^mNmP>jo2A z-S1lHO*nhqxbJ7DNcvVc7Hf?lTT2O1;ggXI+gz>O-g9q>zQld&#id6*VL=gZn6`Sk z9Ds{mf~YJo24eiy*j~WIQx#Ps#?3g9{;!c6MDNGD%Eup&giW;ou#l| ztf=wwDntECN}>S;rORS8nflTfbA{HKER3HsTl@23+vRD!O0%-{U+-i(eL_If{qqdF z#TE;vZ&|WylK!gAOr<|m-Ys4r&iqi+nOpzt+03O1+V4|;UGdb`xX;bhd1+0U&`aZA zGRKzeSd^f&cyaT`3oGg!-d?JAZPxoWDQs>D>(x8QCVPaxoaOM6SUqowrFSf3+iPw?Tsjf`_x%Uy#on;K+VmjrL9N&y zt`Dol&OEYDIJlm1f8N1-hW(ib*&F#IH}LN`-t_mtUa>Qu>Q6WEGs|y$!0_RAbb-k=f3LE zRFhecJ->ez;+m7>y5_Nn_Tt{)H51DGHU?cQ?h?IxP&3R={Z>=<=`*hxm&^>A|2=)x zcH2*OD(QFEr)-zsTy5^bUzPt`>>cag*yqjnrfHwAS5&XR=h%POy8i#gX(h)JGGy|W z1susd^T%>Z$k8?DlvH^?Fa2Ed$7Y9}R*|e*tjXn$I$?(!^|c|AeUQ6%A+P`O6fl?M}eCw130#oc=%ne{KB8vB8#IXmfbdSEU&mz zt+ny0Tjr#97t8@#!z3*|eAv6X3!E z(`{qeY?-oCAR_$9jPlc0xUvaMKN7KKi!=KD3G+j52&4TGh6-1;Vj?IzDxEao2oqng0QDpjmkX@|tY*I`sdqHwB zOtzD!*T=J&GBHk>zAc{3jOp`~>F?s%OqkwGovxC==D@Tpe|lO1n=RAo-swvd*c_NY zI` Ay8r+H delta 1526 zcmaEPRPx3lN!|c&W)=|!4h{|m!)BXC-mSch3ZawN8VF3z@06ZC!Ie>9`pOtKp8Ba% z-v-@w6KOl2lq~Je!d}4Cx@Adba57ikzFW&CH2h&@J6e{LSdjVpl$!)=;!>w`KL4IN zRdN2kY_iOFuAkll@vC3%Zq=D0Vij!o*!KL*#l_$D?2h{P>vzAoOUZ1%LncQuHm1rh z_jw#)-urFgFLW)XX8~Yn{&pEs9am3s`E4TVPEUSC4V%x>M z*Jfe7XH{qCPkP?6&O5KKI0k|wd|tdoO<^jrp}*IWk$(wUn@sE zF&E+u?ugbFYSlcF;bUl3wXyonmE6$mSyqb+k7i}2`EKStx6XLWBefp2RWD0K&)4XB zF?xA#@sbSj5P6nulkc}kRqE-rT`roxnxa`bpNB_83*CKr-fr59y!%?7CF}ETC%&-j zRhn6x;V^f~r~Q1tja2H(*T^2ecKR0gMz6qG-y#W3Nq$q%&cy@jAO?)KX`5TPvFnQ{^tkGYyKGiSXSR}&shKJarA@pHFFrw|F+fON#yT-EPK8Fy6pR%k82It7QUYTMbxO4H>>eyv9Z`M;~@Sci?VEmW{1=- zW?%O>eXCqw?%|DpR%`qb*uQ;);f~CWzRD3dQvb9n{= zcg>zBUSGrP-=c3PIs4b#Cr^C(H=VpG_jL00>Mav{*sHh9?BW0J;d#v2R!i;iL%FH< z*Z&pR8Xj29E3KcLeEG&29y0~*z+wS){jBg`Qw_pgCwn^?sp;t5ny_I<4r5~B!=^)z zF7a}AcZ&;&P1o<)9(t>+y0VwY=J>lq+N$^U9Wva z@5aAffA)3V^uCqK|CFP?oOzoNXb`Ai_PaY=MDmbj%IE@9nG@+bTsSlm&}IEHrr3S zvP~D8p5Vd8!iCU1Juil>km*I_^oKEQ2~12e(-%gu$xpYBVPl=19?NFKbRiBRGCzim zYx=oZHe04!Nz)7C*bJxJ#jzPOy~qG@l9>AQK(xVh)_67prvD`%j?(mVWsH2&U;3~K zOfQdTlVakj010bP-xtqj!Q@^!y)lwaayoA{qxf`<1U4oGy^aX3A7BX}WtNn;BEmJfCWOHB=&71x`kK4&(i>9dpAv{W8AvoYwUXO?89=j9ir26(fwF)%PN1TX|JNXjxW IXu5#709EIuqW}N^ diff --git a/src/com/limelight/binding/input/ControllerHandler.java b/src/com/limelight/binding/input/ControllerHandler.java index 26d47a18..471ff411 100644 --- a/src/com/limelight/binding/input/ControllerHandler.java +++ b/src/com/limelight/binding/input/ControllerHandler.java @@ -47,6 +47,9 @@ public class ControllerHandler { public ControllerHandler(NvConnection conn) { this.conn = conn; + + // We want limelight-common to scale the axis values to match Xinput values + ControllerPacket.enableAxisScaling = true; } private ControllerMapping createMappingForDevice(InputDevice dev) { @@ -135,6 +138,15 @@ public class ControllerHandler { InputDevice.MotionRange lsYRange = dev.getMotionRange(mapping.leftStickYAxis); if (lsXRange != null && lsYRange != null) { mapping.leftStickDeadzoneRadius = Math.max(lsXRange.getFlat(), lsYRange.getFlat()); + + // If there isn't a (reasonable) deadzone at all, use 20% + if (mapping.leftStickDeadzoneRadius < 0.02f) { + mapping.leftStickDeadzoneRadius = 0.20f; + } + // Check that the deadzone is 10% at minimum + else if (mapping.leftStickDeadzoneRadius < 0.10f) { + mapping.leftStickDeadzoneRadius = 0.10f; + } } } @@ -143,6 +155,15 @@ public class ControllerHandler { InputDevice.MotionRange rsYRange = dev.getMotionRange(mapping.rightStickYAxis); if (rsXRange != null && rsYRange != null) { mapping.rightStickDeadzoneRadius = Math.max(rsXRange.getFlat(), rsYRange.getFlat()); + + // If there isn't a (reasonable) deadzone at all, use 20% + if (mapping.rightStickDeadzoneRadius < 0.02f) { + mapping.rightStickDeadzoneRadius = 0.20f; + } + // Check that the deadzone is 10% at minimum + else if (mapping.rightStickDeadzoneRadius < 0.10f) { + mapping.rightStickDeadzoneRadius = 0.10f; + } } } @@ -242,7 +263,7 @@ public class ControllerHandler { // Scale the input based on the distance from the deadzone inputVector.getNormalized(normalizedInputVector); normalizedInputVector.scalarMultiply((inputVector.getMagnitude() - deadzoneRadius) / (1.0f - deadzoneRadius)); - + // Bound the X value to -1.0 to 1.0 if (normalizedInputVector.getX() > 1.0f) { normalizedInputVector.setX(1.0f); @@ -284,7 +305,7 @@ public class ControllerHandler { event.getAxisValue(mapping.rightStickYAxis), mapping.rightStickDeadzoneRadius); rightStickX = (short)(rightStickVector.getX() * 0x7FFE); - rightStickY = (short)(-rightStickVector.getY() * 0x7FFE); + rightStickY = (short)(-rightStickVector.getY() * 0x7FFE); } // Handle controllers with analog triggers