class DAController { private ControllDevice gamepad; public ControllStick leftStick; public ControllStick rightStick; private ControllCoolieHat DPad; private ControllSlider XBOXTrig; // concessions to the XBOX Controller, maybe I'm going a little overboard? public float leftTriggerMultiplier, leftTriggerTolerance, leftTriggerTotalValue; public float rightTriggerMultiplier, rightTriggerTolerance, rightTriggerTotalValue; private ControllButton X; private ControllButton C; private ControllButton T; private ControllButton S; private ControllButton L1; private ControllButton L2; private ControllButton L3; private ControllButton R1; private ControllButton R2; private ControllButton R3; private ControllButton Select; private ControllButton Start; private ControllButton Up; private ControllButton Down; private ControllButton Left; private ControllButton Right; public boolean invertLeftX; public boolean invertLeftY; public boolean invertRightX; public boolean invertRightY; DAController(ControllDevice d) { gamepad = d; println(gamepad.getName()); if ( gamepad.getName().equals("USB Force Feedback Joypad (MP-8888)") ) { mapJoybox(); } else if ( gamepad.getName().equals("Logitech Dual Action USB") ) { mapLogitech(); } else if ( gamepad.getName().equals("4 axis 16 button joystick") ) { mapGeneric(); } else if ( gamepad.getName().equals("XBOX 360 For Windows (Controller)") ) { mapXBOX360(); } else { println("Unrecognized device name, using Logitech mapping."); mapLogitech(); } leftTriggerTotalValue = rightTriggerTotalValue = 0; invertLeftX = invertLeftY = invertRightX = invertRightY = false; } private void mapJoybox() { gamepad.printSticks(); gamepad.printButtons(); leftStick = gamepad.getStick(1); rightStick = gamepad.getStick(0); leftTriggerMultiplier = rightTriggerMultiplier = 1; leftTriggerTolerance = rightTriggerTolerance = 0; T = gamepad.getButton(0); C = gamepad.getButton(1); X = gamepad.getButton(2); S = gamepad.getButton(3); R1 = gamepad.getButton(7); R2 = gamepad.getButton(5); R3 = gamepad.getButton(11); L1 = gamepad.getButton(6); L2 = gamepad.getButton(4); L3 = gamepad.getButton(10); DPad = gamepad.getCoolieHat(12); Select = gamepad.getButton(9); Start = gamepad.getButton(8); } private void mapLogitech() { gamepad.printSticks(); gamepad.printButtons(); leftStick = gamepad.getStick(1); rightStick = gamepad.getStick(0); leftTriggerMultiplier = rightTriggerMultiplier = 1; leftTriggerTolerance = rightTriggerTolerance = 0; T = gamepad.getButton(4); C = gamepad.getButton(3); X = gamepad.getButton(2); S = gamepad.getButton(1); R1 = gamepad.getButton(6); R2 = gamepad.getButton(8); R3 = gamepad.getButton(12); L1 = gamepad.getButton(5); L2 = gamepad.getButton(7); L3 = gamepad.getButton(11); DPad = gamepad.getCoolieHat(0); Select = gamepad.getButton(9); Start = gamepad.getButton(10); } private void mapGeneric() { gamepad.printSticks(); gamepad.printButtons(); leftStick = gamepad.getStick(0); rightStick = gamepad.getStick(1); leftTriggerMultiplier = rightTriggerMultiplier = 1; leftTriggerTolerance = rightTriggerTolerance = 0; T = gamepad.getButton(0); C = gamepad.getButton(1); X = gamepad.getButton(2); S = gamepad.getButton(3); R1 = gamepad.getButton(7); R2 = gamepad.getButton(5); R3 = gamepad.getButton(10); L1 = gamepad.getButton(6); L2 = gamepad.getButton(4); L3 = gamepad.getButton(9); Up = gamepad.getButton(12); Right = gamepad.getButton(13); Down = gamepad.getButton(14); Left = gamepad.getButton(15); Select = gamepad.getButton(8); Start = gamepad.getButton(11); } private void mapXBOX360() { gamepad.printSliders(); gamepad.printButtons(); leftStick = new ControllStick(gamepad.getSlider(1), gamepad.getSlider(0)); rightStick = new ControllStick(gamepad.getSlider(3), gamepad.getSlider(2)); XBOXTrig = gamepad.getSlider(4); leftTriggerTolerance = rightTriggerTolerance = XBOXTrig.getTolerance(); leftTriggerMultiplier = rightTriggerMultiplier = XBOXTrig.getMultiplier(); T = gamepad.getButton(3); C = gamepad.getButton(1); X = gamepad.getButton(0); S = gamepad.getButton(2); R1 = gamepad.getButton(5); R3 = gamepad.getButton(9); L1 = gamepad.getButton(4); L3 = gamepad.getButton(8); DPad = gamepad.getCoolieHat(10); Select = gamepad.getButton(6); Start = gamepad.getButton(7); } void rumble(float amt) { gamepad.rumble(amt); } void rumble(float amt, int id) { gamepad.rumble(amt, id); } float leftX() { int i = (invertLeftX ? -1 : 1); return leftStick.getX()*i; } float rightX() { int i = (invertRightX ? -1 : 1); return rightStick.getX()*i; } float leftY() { int i = (invertLeftY ? 1 : -1); return leftStick.getY()*i; } float rightY() { int i = (invertRightY ? 1 : -1); return rightStick.getY()*i; } float leftZ() { if ( XBOXTrig != null ) { float v = leftTriggerMultiplier*XBOXTrig.getValue(); if ( v > leftTriggerTolerance ) { leftTriggerTotalValue += v; return v; } else return 0; } else if ( L2 != null ) { if ( L2.pressed() ) { leftTriggerTotalValue += leftTriggerMultiplier; return leftTriggerMultiplier; } else return 0; } else return 0; } float rightZ() { if ( XBOXTrig != null ) { float v = -rightTriggerMultiplier*XBOXTrig.getValue(); if ( v > rightTriggerTolerance ) { rightTriggerTotalValue += v; return v; } else return 0; } else if ( R2 != null ) { if ( R2.pressed() ) { rightTriggerTotalValue += rightTriggerMultiplier; return rightTriggerMultiplier; } else return 0; } else return 0; } boolean T() { return T.pressed(); } boolean C() { return C.pressed(); } boolean X() { return X.pressed(); } boolean S() { return S.pressed(); } boolean L1(){ return L1.pressed(); } boolean L2() { if ( L2 != null ) return L2.pressed(); else if ( XBOXTrig != null ) return leftZ() > 0; else return false; } boolean L3() { return L3.pressed(); } boolean R1() { return R1.pressed(); } boolean R2() { if ( R2 != null ) return R2.pressed(); else if ( XBOXTrig != null ) return rightZ() > 0; else return false; } boolean R3() { return R3.pressed(); } boolean Start() { return Start.pressed(); } boolean Select() { return Select.pressed(); } boolean DUp() { if ( Up != null ) return Up.pressed(); else if ( DPad != null ) return DPad.getY() < 0; else return false; } boolean DDown() { if ( Down != null ) return Down.pressed(); else if ( DPad != null ) return DPad.getY() > 0; else return false; } boolean DLeft() { if ( Left != null ) return Left.pressed(); else if ( DPad != null ) return DPad.getX() < 0; else return false; } boolean DRight() { if ( Right != null ) return Right.pressed(); else if ( DPad != null ) return DPad.getX() > 0; else return false; } }