159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.input; 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.input.controls.JoyAxisTrigger; 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.input.controls.JoyButtonTrigger; 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * A joystick represents a single joystick that is installed in the system. 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Kirill Vainer 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic final class Joystick { 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private InputManager inputManager; 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private JoyInput joyInput; 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private int joyId; 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private int buttonCount; 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private int axisCount; 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private int axisXIndex, axisYIndex; 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private String name; 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Creates a new joystick instance. Only used internally. 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Joystick(InputManager inputManager, JoyInput joyInput, 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int joyId, String name, int buttonCount, int axisCount, 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int xAxis, int yAxis){ 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.inputManager = inputManager; 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.joyInput = joyInput; 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.joyId = joyId; 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.name = name; 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.buttonCount = buttonCount; 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.axisCount = axisCount; 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.axisXIndex = xAxis; 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.axisYIndex = yAxis; 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Rumbles the joystick for the given amount/magnitude. 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param amount The amount to rumble. Should be between 0 and 1. 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void rumble(float amount){ 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta joyInput.setJoyRumble(joyId, amount); 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Assign the mapping name to receive events from the given button index 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * on the joystick. 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param mappingName The mapping to receive joystick button events. 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param buttonId The button index. 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Joystick#getButtonCount() 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void assignButton(String mappingName, int buttonId){ 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (buttonId < 0 || buttonId >= buttonCount) 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException(); 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta inputManager.addMapping(mappingName, new JoyButtonTrigger(joyId, buttonId)); 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Assign the mappings to receive events from the given joystick axis. 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param positiveMapping The mapping to receive events when the axis is negative 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param negativeMapping The mapping to receive events when the axis is positive 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param axisId The axis index. 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Joystick#getAxisCount() 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void assignAxis(String positiveMapping, String negativeMapping, int axisId){ 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta inputManager.addMapping(positiveMapping, new JoyAxisTrigger(joyId, axisId, false)); 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta inputManager.addMapping(negativeMapping, new JoyAxisTrigger(joyId, axisId, true)); 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Gets the index number for the X axis on the joystick. 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p>E.g. for most gamepads, the left control stick X axis will be returned. 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The axis index for the X axis for this joystick. 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Joystick#assignAxis(java.lang.String, java.lang.String, int) 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getXAxisIndex(){ 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return axisXIndex; 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Gets the index number for the Y axis on the joystick. 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p>E.g. for most gamepads, the left control stick Y axis will be returned. 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The axis index for the Y axis for this joystick. 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Joystick#assignAxis(java.lang.String, java.lang.String, int) 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getYAxisIndex(){ 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return axisYIndex; 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the number of axes on this joystick. 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the number of axes on this joystick. 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getAxisCount() { 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return axisCount; 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the number of buttons on this joystick. 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the number of buttons on this joystick. 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getButtonCount() { 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return buttonCount; 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the name of this joystick. 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the name of this joystick. 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public String getName() { 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return name; 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public String toString(){ 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return "Joystick[name=" + name + ", id=" + joyId + ", buttons=" + buttonCount 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta + ", axes=" + axisCount + "]"; 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 137