diff --git a/src/com/limelight/Limelight.java b/src/com/limelight/Limelight.java index 6496ff5..4b943f3 100644 --- a/src/com/limelight/Limelight.java +++ b/src/com/limelight/Limelight.java @@ -1,19 +1,13 @@ package com.limelight; -import java.lang.reflect.Constructor; -import java.util.LinkedList; - import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.UIManager; -import net.java.games.input.Controller; -import net.java.games.input.ControllerEnvironment; - import com.limelight.binding.PlatformBinding; import com.limelight.gui.MainFrame; import com.limelight.gui.StreamFrame; -import com.limelight.input.GamepadHandler; +import com.limelight.input.ControllerListener; import com.limelight.nvstream.NvConnection; import com.limelight.nvstream.NvConnectionListener; import com.limelight.nvstream.StreamConfiguration; @@ -27,7 +21,6 @@ public class Limelight implements NvConnectionListener { private NvConnection conn; private boolean connectionFailed; private static JFrame limeFrame; - private Thread controllerListenerThread; private StreamConfiguration streamConfig = new StreamConfiguration(1280, 720, 30); public Limelight(String host) { @@ -45,69 +38,15 @@ public class Limelight implements NvConnectionListener { } - private void startControllerListener() { - controllerListenerThread = new Thread() { - @Override - public void run() { - - /* - * This is really janky, but it is currently the only way to rescan for controllers. - * The DefaultControllerEnvironment class caches the results of scanning and if a controller is - * unplugged or plugged in, it will not detect it. Since DefaultControllerEnvironment is package-protected - * we have to use reflections in order to manually instantiate a new instance to ensure there is no caching. - * Supposedly Aaron is going to fix JInput and we will have the ability to rescan soon! - */ - try { - //#allthejank - Constructor construct = null; - - Class defEnv = ControllerEnvironment.getDefaultEnvironment().getClass(); - construct = defEnv.getDeclaredConstructor(); - construct.setAccessible(true); - - while(!isInterrupted()) { - - ControllerEnvironment defaultEnv = null; - - defaultEnv = (ControllerEnvironment)construct.newInstance(); - - Controller[] ca = defaultEnv.getControllers(); - LinkedList gamepads = new LinkedList(); - - /* - * iterates through the controllers and adds gamepads and ps3 controller to the list - * NOTE: JInput does not consider a PS3 controller to be a gamepad (it thinks it's a "STICK") so we must use the - * name of it. - */ - for(int i = 0; i < ca.length; i++){ - if (ca[i].getType() == Controller.Type.GAMEPAD) { - gamepads.add(ca[i]); - } else if (ca[i].getName().contains("PLAYSTATION")) { - gamepads.add(ca[i]); - } - } - - GamepadHandler.addGamepads(gamepads, conn); - - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - return; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - }; - controllerListenerThread.start(); + private static void startControllerListener() { + ControllerListener.startUp(); } private static void createFrame() { MainFrame main = new MainFrame(); main.build(); limeFrame = main.getLimeFrame(); + startControllerListener(); } public static void createInstance(String host, boolean fullscreen) { @@ -156,7 +95,7 @@ public class Limelight implements NvConnectionListener { @Override public void connectionStarted() { streamFrame.hideSpinner(); - startControllerListener(); + ControllerListener.startSendingInput(conn); } @Override @@ -167,14 +106,6 @@ public class Limelight implements NvConnectionListener { // Kill the connection to the target conn.stop(); - - // Kill the controller rescanning thread - if (controllerListenerThread != null) { - controllerListenerThread.interrupt(); - try { - controllerListenerThread.join(); - } catch (InterruptedException e1) {} - } // Spin off a new thread to update the UI since // this thread has been interrupted and will terminate diff --git a/src/com/limelight/gui/MainFrame.java b/src/com/limelight/gui/MainFrame.java index ff8bc65..03ff9d6 100644 --- a/src/com/limelight/gui/MainFrame.java +++ b/src/com/limelight/gui/MainFrame.java @@ -6,6 +6,8 @@ import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.io.IOException; import java.net.InetAddress; import java.net.SocketException; @@ -24,6 +26,7 @@ import org.xmlpull.v1.XmlPullParserException; import com.limelight.Limelight; import com.limelight.binding.PlatformBinding; +import com.limelight.input.ControllerListener; import com.limelight.nvstream.NvConnection; import com.limelight.nvstream.http.NvHTTP; @@ -41,7 +44,13 @@ public class MainFrame { public void build() { limeFrame = new JFrame("Limelight"); limeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - + limeFrame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + super.windowClosing(e); + ControllerListener.stopListening(); + } + }); Container mainPane = limeFrame.getContentPane(); mainPane.setLayout(new BorderLayout()); @@ -85,12 +94,25 @@ public class MainFrame { Box contentBox = Box.createVerticalBox(); contentBox.add(Box.createVerticalStrut(20)); contentBox.add(hostBox); + JButton settings = new JButton("Settings"); + settings.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new SettingsFrame().build(); + } + }); + contentBox.add(settings); contentBox.add(Box.createVerticalStrut(5)); contentBox.add(fullscreen); contentBox.add(Box.createVerticalStrut(5)); contentBox.add(streamBox); contentBox.add(Box.createVerticalStrut(10)); contentBox.add(pairBox); + + + + + contentBox.add(Box.createVerticalGlue()); centerPane.add(contentBox); diff --git a/src/com/limelight/input/ControllerComponent.java b/src/com/limelight/input/ControllerComponent.java index 65c75d7..2a3515b 100644 --- a/src/com/limelight/input/ControllerComponent.java +++ b/src/com/limelight/input/ControllerComponent.java @@ -4,21 +4,23 @@ import javax.swing.JLabel; import javax.swing.JTextField; public enum ControllerComponent { - BTN_A("Button 1 (A)"), BTN_X("Button 2 (X)"), BTN_Y("Button 3 (Y)"), BTN_B("Button 4 (B)"), - DPAD_UP("D-pad Up"), DPAD_DOWN("D-pad Down"), DPAD_LEFT("D-pad Left"), DPAD_RIGHT("D-pad Right"), - LS_X("Left Stick X"), LS_Y("Left Stick X"), RS_X("Right Stick X"), RS_Y("Left Stick Y"), - LS_THUMB("Left Stick Button"), RS_THUMB("Right Stick Button"), - LT("Left Trigger"), RT("Right Trigger"), LB("Left Bumper"), RB("Right Bumper"), - BTN_START("Start Button"), BTN_BACK("Back Button"), BTN_SPECIAL("Special Button"); + BTN_A("Button 1 (A)", false), BTN_X("Button 2 (X)", false), BTN_Y("Button 3 (Y)", false), BTN_B("Button 4 (B)", false), + DPAD_UP("D-pad Up", false), DPAD_DOWN("D-pad Down", false), DPAD_LEFT("D-pad Left", false), DPAD_RIGHT("D-pad Right", false), + LS_X("Left Stick X", true), LS_Y("Left Stick X", true), RS_X("Right Stick X", true), RS_Y("Left Stick Y", true), + LS_THUMB("Left Stick Button", false), RS_THUMB("Right Stick Button", false), + LT("Left Trigger", true), RT("Right Trigger", true), LB("Left Bumper", false), RB("Right Bumper", false), + BTN_START("Start Button", false), BTN_BACK("Back Button", false), BTN_SPECIAL("Special Button", false); private JLabel label; private JTextField textBox; + private boolean analog; - private ControllerComponent(String name) { + private ControllerComponent(String name, boolean analog) { this.label = new JLabel(name); this.textBox = new JTextField(); this.textBox.setEditable(false); this.textBox.setName(this.name()); + this.analog = analog; } public JLabel getLabel() { @@ -28,4 +30,8 @@ public enum ControllerComponent { public JTextField getTextField() { return textBox; } + + public boolean isAnalog() { + return analog; + } } diff --git a/src/com/limelight/input/ControllerListener.java b/src/com/limelight/input/ControllerListener.java new file mode 100644 index 0000000..53c85d8 --- /dev/null +++ b/src/com/limelight/input/ControllerListener.java @@ -0,0 +1,94 @@ +package com.limelight.input; + +import java.lang.reflect.Constructor; +import java.util.LinkedList; + +import com.limelight.nvstream.NvConnection; + +import net.java.games.input.Controller; +import net.java.games.input.ControllerEnvironment; + +public class ControllerListener { + private static Thread listenerThread; + private static NvConnection conn; + + /** + * starts a thread to listen to controllers + * @return true if it started a thread, false if the thread is already running. + */ + public static boolean startUp() { + if (listenerThread == null || !listenerThread.isAlive()) { + listenerThread = new Thread() { + @Override + public void run() { + + /* + * This is really janky, but it is currently the only way to rescan for controllers. + * The DefaultControllerEnvironment class caches the results of scanning and if a controller is + * unplugged or plugged in, it will not detect it. Since DefaultControllerEnvironment is package-protected + * we have to use reflections in order to manually instantiate a new instance to ensure there is no caching. + * Supposedly Aaron is going to fix JInput and we will have the ability to rescan soon! + */ + try { + //#allthejank + Constructor construct = null; + + Class defEnv = ControllerEnvironment.getDefaultEnvironment().getClass(); + construct = defEnv.getDeclaredConstructor(); + construct.setAccessible(true); + + while(!isInterrupted()) { + + ControllerEnvironment defaultEnv = null; + + defaultEnv = (ControllerEnvironment)construct.newInstance(); + + Controller[] ca = defaultEnv.getControllers(); + LinkedList gamepads = new LinkedList(); + + /* + * iterates through the controllers and adds gamepads and ps3 controller to the list + * NOTE: JInput does not consider a PS3 controller to be a gamepad (it thinks it's a "STICK") so we must use the + * name of it. + */ + for(int i = 0; i < ca.length; i++){ + if (ca[i].getType() == Controller.Type.GAMEPAD) { + gamepads.add(ca[i]); + } else if (ca[i].getName().contains("PLAYSTATION")) { + gamepads.add(ca[i]); + } + } + + GamepadHandler.addGamepads(gamepads); + if (conn != null) { + GamepadHandler.setConnection(conn); + } + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + return; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + listenerThread.start(); + return true; + } + return false; + } + + public static void stopListening() { + if (listenerThread != null && listenerThread.isAlive()) { + listenerThread.interrupt(); + } + } + + public static void startSendingInput(NvConnection connection) { + conn = connection; + } + +} diff --git a/src/com/limelight/input/Gamepad.java b/src/com/limelight/input/Gamepad.java index fee64fa..6496674 100644 --- a/src/com/limelight/input/Gamepad.java +++ b/src/com/limelight/input/Gamepad.java @@ -1,103 +1,87 @@ package com.limelight.input; import com.limelight.nvstream.NvConnection; +import com.limelight.nvstream.input.ControllerPacket; import net.java.games.input.Component; import net.java.games.input.Controller; import net.java.games.input.Event; import net.java.games.input.EventQueue; -public abstract class Gamepad { - protected Controller pad; - private NvConnection conn; - - protected short inputMap = 0x0000; - protected byte leftTrigger = 0x00; - protected byte rightTrigger = 0x00; - protected short rightStickX = 0x0000; - protected short rightStickY = 0x0000; - protected short leftStickX = 0x0000; - protected short leftStickY = 0x0000; - - protected GamepadSettings configuration; - - public enum ControllerType { XBOX, PS3 }; - - - public static Gamepad createInstance(NvConnection conn, Controller pad, ControllerType type) { - switch (type) { - case XBOX: - return new XBox360Controller(conn, pad); - case PS3: - return new PS3Controller(conn, pad); - default: - return new XBox360Controller(conn, pad); - } - } - - public Gamepad(NvConnection conn, Controller pad) { - this.conn = conn; +public class Gamepad { + private Controller pad; + private GamepadSettings config; + + private short inputMap = 0x0000; + private byte leftTrigger = 0x00; + private byte rightTrigger = 0x00; + private short rightStickX = 0x0000; + private short rightStickY = 0x0000; + private short leftStickX = 0x0000; + private short leftStickY = 0x0000; + + public Gamepad(Controller pad, GamepadSettings settings) { + this.config = settings; this.pad = pad; - - configuration = new GamepadSettings(); - + for (Component comp : pad.getComponents()) { initValue(comp); } - } - + public GamepadSettings getConfiguration() { - return configuration; + return config; } - + private void initValue(Component comp) { handleComponent(comp, comp.getPollData()); } - + public boolean poll() { return pad.poll(); } - - public void sendControllerPacket() { - conn.sendControllerInput(inputMap, leftTrigger, rightTrigger, - leftStickX, leftStickY, rightStickX, rightStickY); + + private void sendControllerPacket(NvConnection conn) { + if (conn != null) { + conn.sendControllerInput(inputMap, leftTrigger, rightTrigger, + leftStickX, leftStickY, rightStickX, rightStickY); + } } - + public EventQueue getEvents() { return pad.getEventQueue(); } - - public void handleEvents() { + + public void handleEvents(NvConnection conn) { EventQueue queue = pad.getEventQueue(); Event event = new Event(); - + while(queue.getNextEvent(event)) { - + /* uncommented for debugging */ //printInfo(pad, event); handleEvent(event); - sendControllerPacket(); + sendControllerPacket(conn); } - + } - + /* * used for debugging, normally unused. */ @SuppressWarnings("unused") private void printInfo(Controller gamepad, Event event) { Component comp = event.getComponent(); - + StringBuilder builder = new StringBuilder(gamepad.getName()); - + builder.append(" at "); builder.append(event.getNanos()).append(": "); builder.append(comp.getName()).append(" changed to "); - - + + float value = event.getValue(); if(comp.isAnalog()) { builder.append(value); @@ -108,33 +92,118 @@ public abstract class Gamepad { builder.append("Off"); } } - + System.out.println(builder.toString()); } - + private void handleEvent(Event event) { Component comp = event.getComponent(); float value = event.getValue(); - + handleComponent(comp, value); } - + private void handleComponent(Component comp, float value) { - if (comp.isAnalog()) { - handleAnalog(comp, value); + ControllerComponent contComp = config.getControllerComponent(comp); + if (contComp.isAnalog()) { + handleAnalog(contComp, value); } else { - handleButtons(comp, value); + handleButtons(contComp, value); } } - - protected void toggle(short button, boolean press) { + + private void toggle(short button, boolean press) { if (press) { inputMap |= button; } else { inputMap &= ~button; } } + + private void handleAnalog(ControllerComponent contComp, float value) { + + + switch (contComp) { + case LS_X: + leftStickX = (short)Math.round(value * 0x7FFF); + break; + case LS_Y: + leftStickY = (short)Math.round(value * 0x7FFF); + break; + case RS_X: + leftStickX = (short)Math.round(value * 0x7FFF); + break; + case RS_Y: + rightStickY = (short)Math.round(value * 0x7FFF); + break; + case LT: + leftTrigger = (byte)Math.round((value + 1) / 2 * 0xFF); + break; + case RT: + rightTrigger = (byte)Math.round((value + 1) / 2 * 0xFF); + break; + default: + System.out.println("A mapping error has occured. Ignoring: " + contComp.name()); + break; + } + } - protected abstract void handleAnalog(Component comp, float value); - protected abstract void handleButtons(Component comp, float value); + private void handleButtons(ControllerComponent contComp, float value) { + boolean press = false; + + if (value > 0.5F) { + press = true; + } + + switch (contComp) { + case BTN_A: + toggle(ControllerPacket.A_FLAG, press); + break; + case BTN_X: + toggle(ControllerPacket.X_FLAG, press); + break; + case BTN_Y: + toggle(ControllerPacket.Y_FLAG, press); + break; + case BTN_B: + toggle(ControllerPacket.B_FLAG, press); + break; + case DPAD_UP: + toggle(ControllerPacket.UP_FLAG, press); + break; + case DPAD_DOWN: + toggle(ControllerPacket.DOWN_FLAG, press); + break; + case DPAD_LEFT: + toggle(ControllerPacket.LEFT_FLAG, press); + break; + case DPAD_RIGHT: + toggle(ControllerPacket.RIGHT_FLAG, press); + break; + case LS_THUMB: + toggle(ControllerPacket.LS_CLK_FLAG, press); + break; + case RS_THUMB: + toggle(ControllerPacket.RS_CLK_FLAG, press); + break; + case LB: + toggle(ControllerPacket.LB_FLAG, press); + break; + case RB: + toggle(ControllerPacket.RB_FLAG, press); + break; + case BTN_START: + toggle(ControllerPacket.PLAY_FLAG, press); + break; + case BTN_BACK: + toggle(ControllerPacket.BACK_FLAG, press); + break; + case BTN_SPECIAL: + toggle(ControllerPacket.SPECIAL_BUTTON_FLAG, press); + break; + default: + System.out.println("A mapping error has occured. Ignoring: " + contComp.name()); + break; + } + } } diff --git a/src/com/limelight/input/GamepadHandler.java b/src/com/limelight/input/GamepadHandler.java index c63daf5..e6f919b 100644 --- a/src/com/limelight/input/GamepadHandler.java +++ b/src/com/limelight/input/GamepadHandler.java @@ -5,62 +5,60 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; -import javax.swing.event.ListSelectionEvent; - -import com.limelight.input.Gamepad.ControllerType; import com.limelight.nvstream.NvConnection; import net.java.games.input.Controller; public class GamepadHandler { private static LinkedList gamepads = new LinkedList(); - private static GamepadHandler singleton; + private static NvConnection conn; + private static Thread handler; - public static void addGamepads(List pads, NvConnection conn) { - if (singleton == null) { - singleton = new GamepadHandler(); - singleton.startUp(); - } + public static void addGamepads(List pads) { gamepads.clear(); for (Controller pad : pads) { - - gamepads.add(Gamepad.createInstance(conn, pad, getType(pad))); + + gamepads.add(new Gamepad(pad, null)); //TODO: need to create/get the settings for this controller } } - private static ControllerType getType(Controller pad) { - if (pad.getType() == Controller.Type.GAMEPAD) { - return ControllerType.XBOX; - } - if (pad.getName().contains("PLAYSTATION")) { - return ControllerType.PS3; - } - return null; + public static void setConnection(NvConnection connection) { + conn = connection; } - + public static List getGamepads() { return Collections.unmodifiableList(gamepads); } - - private void startUp() { - new Thread(new Runnable() { - @Override - public void run() { - while (true) { - for (Gamepad gamepad : gamepads) { - if (!gamepad.poll()) { - break; + + public static void startUp() { + if (handler == null || !handler.isAlive()) { + handler = new Thread(new Runnable() { + @Override + public void run() { + while (true) { + for (Gamepad gamepad : gamepads) { + if (!gamepad.poll()) { + break; + } + gamepad.handleEvents(conn); } - gamepad.handleEvents(); + try { + Thread.sleep(20); + } catch (InterruptedException e) {} } - try { - Thread.sleep(20); - } catch (InterruptedException e) {} } - } - }).start(); + }); + handler.start(); + } + } + + public static void stopHandler() { + if (handler != null && handler.isAlive()) { + handler.interrupt(); + conn = null; + } } } diff --git a/src/com/limelight/input/GamepadSettings.java b/src/com/limelight/input/GamepadSettings.java index 7f38431..fe8de61 100644 --- a/src/com/limelight/input/GamepadSettings.java +++ b/src/com/limelight/input/GamepadSettings.java @@ -6,12 +6,18 @@ import net.java.games.input.Component; public class GamepadSettings { private HashMap mapping; + private HashMap inverseMapping; public void insertSetting(ControllerComponent contComp, Component comp) { mapping.put(contComp, comp); + inverseMapping.put(comp, contComp); } public Component getComponent(ControllerComponent contComp) { return mapping.get(contComp); } + + public ControllerComponent getControllerComponent(Component comp) { + return inverseMapping.get(comp); + } } diff --git a/src/com/limelight/input/PS3Controller.java b/src/com/limelight/input/PS3Controller.java deleted file mode 100644 index a21ed3b..0000000 --- a/src/com/limelight/input/PS3Controller.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.limelight.input; - -import com.limelight.nvstream.NvConnection; -import com.limelight.nvstream.input.ControllerPacket; - -import net.java.games.input.Component; -import net.java.games.input.Controller; - -public class PS3Controller extends Gamepad { - - public PS3Controller(NvConnection conn, Controller pad) { - super(conn, pad); - } - - @Override - protected void handleAnalog(Component comp, float value) { - Component.Identifier id = comp.getIdentifier(); - - if (id == Component.Identifier.Axis.Z) { - rightStickX = (short)Math.round(value * 0x7FFF); - } else if (id == Component.Identifier.Axis.RZ) { - rightStickY = (short)Math.round(-value * 0x7FFF); - } else if (id == Component.Identifier.Axis.X) { - leftStickX = (short)Math.round(value * 0x7FFF); - } else if (id == Component.Identifier.Axis.Y) { - leftStickY = (short)Math.round(-value * 0x7FFF); - } - } - - @Override - protected void handleButtons(Component comp, float value) { - Component.Identifier id = comp.getIdentifier(); - boolean press = value > 0.5F; - - if (id == Component.Identifier.Button._7) { - toggle(ControllerPacket.LEFT_FLAG, press); - } else if (id == Component.Identifier.Button._5) { - toggle(ControllerPacket.RIGHT_FLAG, press); - } else if (id == Component.Identifier.Button._4) { - toggle(ControllerPacket.UP_FLAG, press); - } else if (id == Component.Identifier.Button._6) { - toggle(ControllerPacket.DOWN_FLAG, press); - } else if (id == Component.Identifier.Button._14) { - toggle(ControllerPacket.A_FLAG, press); - } else if (id == Component.Identifier.Button._15) { - toggle(ControllerPacket.X_FLAG, press); - } else if (id == Component.Identifier.Button._12) { - toggle(ControllerPacket.Y_FLAG, press); - } else if (id == Component.Identifier.Button._13) { - toggle(ControllerPacket.B_FLAG, press); - } else if (id == Component.Identifier.Button._0) { - toggle(ControllerPacket.BACK_FLAG, press); - } else if (id == Component.Identifier.Button._3) { - toggle(ControllerPacket.PLAY_FLAG, press); - } else if (id == Component.Identifier.Button._2) { - toggle(ControllerPacket.RS_CLK_FLAG, press); - } else if (id == Component.Identifier.Button._1) { - toggle(ControllerPacket.LS_CLK_FLAG, press); - } else if (id == Component.Identifier.Button._10) { - toggle(ControllerPacket.LB_FLAG, press); - } else if (id == Component.Identifier.Button._11) { - toggle(ControllerPacket.RB_FLAG, press); - } else if (id == Component.Identifier.Button._16) { - toggle(ControllerPacket.SPECIAL_BUTTON_FLAG, press); - } else if (id == Component.Identifier.Button._8) { - leftTrigger = (byte)Math.round((press ? 1 : 0) * 0xFF); - } else if (id == Component.Identifier.Button._9) { - rightTrigger = (byte)Math.round((press ? 1 : 0) * 0xFF); - } - } -} diff --git a/src/com/limelight/input/XBox360Controller.java b/src/com/limelight/input/XBox360Controller.java deleted file mode 100644 index a393297..0000000 --- a/src/com/limelight/input/XBox360Controller.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.limelight.input; - -import net.java.games.input.Component; -import net.java.games.input.Controller; - -import com.limelight.nvstream.NvConnection; -import com.limelight.nvstream.input.ControllerPacket; - -public class XBox360Controller extends Gamepad { - - public XBox360Controller(NvConnection conn, Controller pad) { - super(conn, pad); - } - - @Override - protected void handleButtons(Component comp, float value) { - Component.Identifier id = comp.getIdentifier(); - boolean press = value > 0.5F; - - if (id == Component.Identifier.Button._13) { - toggle(ControllerPacket.LEFT_FLAG, press); - } else if (id == Component.Identifier.Button._14) { - toggle(ControllerPacket.RIGHT_FLAG, press); - } else if (id == Component.Identifier.Button._11) { - toggle(ControllerPacket.UP_FLAG, press); - } else if (id == Component.Identifier.Button._12) { - toggle(ControllerPacket.DOWN_FLAG, press); - } else if (id == Component.Identifier.Button._0) { - toggle(ControllerPacket.A_FLAG, press); - } else if (id == Component.Identifier.Button._2) { - toggle(ControllerPacket.X_FLAG, press); - } else if (id == Component.Identifier.Button._3) { - toggle(ControllerPacket.Y_FLAG, press); - } else if (id == Component.Identifier.Button._1) { - toggle(ControllerPacket.B_FLAG, press); - } else if (id == Component.Identifier.Button._9) { - toggle(ControllerPacket.BACK_FLAG, press); - } else if (id == Component.Identifier.Button._8) { - toggle(ControllerPacket.PLAY_FLAG, press); - } else if (id == Component.Identifier.Button._7) { - toggle(ControllerPacket.RS_CLK_FLAG, press); - } else if (id == Component.Identifier.Button._6) { - toggle(ControllerPacket.LS_CLK_FLAG, press); - } else if (id == Component.Identifier.Button._4) { - toggle(ControllerPacket.LB_FLAG, press); - } else if (id == Component.Identifier.Button._5) { - toggle(ControllerPacket.RB_FLAG, press); - } else if (id == Component.Identifier.Button._10) { - toggle(ControllerPacket.SPECIAL_BUTTON_FLAG, press); - } - } - - @Override - protected void handleAnalog(Component comp, float value) { - Component.Identifier id = comp.getIdentifier(); - - if (id == Component.Identifier.Axis.RX) { - rightStickX = (short)Math.round(value * 0x7FFF); - } else if (id == Component.Identifier.Axis.RY) { - rightStickY = (short)Math.round(-value * 0x7FFF); - } else if (id == Component.Identifier.Axis.X) { - leftStickX = (short)Math.round(value * 0x7FFF); - } else if (id == Component.Identifier.Axis.Y) { - leftStickY = (short)Math.round(-value * 0x7FFF); - } else if (id == Component.Identifier.Axis.Z) { - leftTrigger = (byte)Math.round((value + 1) / 2 * 0xFF); - } else if (id == Component.Identifier.Axis.RZ) { - rightTrigger = (byte)Math.round((value + 1) / 2 * 0xFF); - } - - } - -}