From 48ba812cf6e10aeafdf4cf6f119ff1653a684959 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 7 May 2016 21:19:02 -0400 Subject: [PATCH] When combining analog inputs, use the one with the highest magnitude --- .../binding/input/ControllerHandler.java | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/input/ControllerHandler.java b/app/src/main/java/com/limelight/binding/input/ControllerHandler.java index 78f9e5c9..6d40545e 100644 --- a/app/src/main/java/com/limelight/binding/input/ControllerHandler.java +++ b/app/src/main/java/com/limelight/binding/input/ControllerHandler.java @@ -400,6 +400,28 @@ public class ControllerHandler implements InputManager.InputDeviceListener, UsbD return context; } + private byte maxByMagnitude(byte a, byte b) { + int absA = Math.abs(a); + int absB = Math.abs(b); + if (absA > absB) { + return a; + } + else { + return b; + } + } + + private short maxByMagnitude(short a, short b) { + int absA = Math.abs(a); + int absB = Math.abs(b); + if (absA > absB) { + return a; + } + else { + return b; + } + } + private void sendControllerInputPacket(GenericControllerContext originalContext) { assignControllerNumberIfNeeded(originalContext); @@ -420,34 +442,34 @@ public class ControllerHandler implements InputManager.InputDeviceListener, UsbD GenericControllerContext context = inputDeviceContexts.valueAt(i); if (context.assignedControllerNumber && context.controllerNumber == controllerNumber) { inputMap |= context.inputMap; - leftTrigger |= context.leftTrigger; - rightTrigger |= context.rightTrigger; - leftStickX |= context.leftStickX; - leftStickY |= context.leftStickY; - rightStickX |= context.rightStickX; - rightStickY |= context.rightStickY; + leftTrigger |= maxByMagnitude(leftTrigger, context.leftTrigger); + rightTrigger |= maxByMagnitude(rightTrigger, context.rightTrigger); + leftStickX |= maxByMagnitude(leftStickX, context.leftStickX); + leftStickY |= maxByMagnitude(leftStickY, context.leftStickY); + rightStickX |= maxByMagnitude(rightStickX, context.rightStickX); + rightStickY |= maxByMagnitude(rightStickY, context.rightStickY); } } for (int i = 0; i < usbDeviceContexts.size(); i++) { GenericControllerContext context = usbDeviceContexts.valueAt(i); if (context.assignedControllerNumber && context.controllerNumber == controllerNumber) { inputMap |= context.inputMap; - leftTrigger |= context.leftTrigger; - rightTrigger |= context.rightTrigger; - leftStickX |= context.leftStickX; - leftStickY |= context.leftStickY; - rightStickX |= context.rightStickX; - rightStickY |= context.rightStickY; + leftTrigger |= maxByMagnitude(leftTrigger, context.leftTrigger); + rightTrigger |= maxByMagnitude(rightTrigger, context.rightTrigger); + leftStickX |= maxByMagnitude(leftStickX, context.leftStickX); + leftStickY |= maxByMagnitude(leftStickY, context.leftStickY); + rightStickX |= maxByMagnitude(rightStickX, context.rightStickX); + rightStickY |= maxByMagnitude(rightStickY, context.rightStickY); } } if (defaultContext.controllerNumber == controllerNumber) { inputMap |= defaultContext.inputMap; - leftTrigger |= defaultContext.leftTrigger; - rightTrigger |= defaultContext.rightTrigger; - leftStickX |= defaultContext.leftStickX; - leftStickY |= defaultContext.leftStickY; - rightStickX |= defaultContext.rightStickX; - rightStickY |= defaultContext.rightStickY; + leftTrigger |= maxByMagnitude(leftTrigger, defaultContext.leftTrigger); + rightTrigger |= maxByMagnitude(rightTrigger, defaultContext.rightTrigger); + leftStickX |= maxByMagnitude(leftStickX, defaultContext.leftStickX); + leftStickY |= maxByMagnitude(leftStickY, defaultContext.leftStickY); + rightStickX |= maxByMagnitude(rightStickX, defaultContext.rightStickX); + rightStickY |= maxByMagnitude(rightStickY, defaultContext.rightStickY); } conn.sendControllerInput(controllerNumber, inputMap,