diff options
Diffstat (limited to 'engine/src/core/com/jme3/input/Joystick.java')
-rw-r--r-- | engine/src/core/com/jme3/input/Joystick.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/engine/src/core/com/jme3/input/Joystick.java b/engine/src/core/com/jme3/input/Joystick.java new file mode 100644 index 0000000..658781f --- /dev/null +++ b/engine/src/core/com/jme3/input/Joystick.java @@ -0,0 +1,136 @@ +package com.jme3.input; + +import com.jme3.input.controls.JoyAxisTrigger; +import com.jme3.input.controls.JoyButtonTrigger; + +/** + * A joystick represents a single joystick that is installed in the system. + * + * @author Kirill Vainer + */ +public final class Joystick { + + private InputManager inputManager; + private JoyInput joyInput; + private int joyId; + private int buttonCount; + private int axisCount; + private int axisXIndex, axisYIndex; + private String name; + + /** + * Creates a new joystick instance. Only used internally. + */ + public Joystick(InputManager inputManager, JoyInput joyInput, + int joyId, String name, int buttonCount, int axisCount, + int xAxis, int yAxis){ + this.inputManager = inputManager; + this.joyInput = joyInput; + this.joyId = joyId; + this.name = name; + this.buttonCount = buttonCount; + this.axisCount = axisCount; + + this.axisXIndex = xAxis; + this.axisYIndex = yAxis; + } + + /** + * Rumbles the joystick for the given amount/magnitude. + * + * @param amount The amount to rumble. Should be between 0 and 1. + */ + public void rumble(float amount){ + joyInput.setJoyRumble(joyId, amount); + } + + /** + * Assign the mapping name to receive events from the given button index + * on the joystick. + * + * @param mappingName The mapping to receive joystick button events. + * @param buttonId The button index. + * + * @see Joystick#getButtonCount() + */ + public void assignButton(String mappingName, int buttonId){ + if (buttonId < 0 || buttonId >= buttonCount) + throw new IllegalArgumentException(); + + inputManager.addMapping(mappingName, new JoyButtonTrigger(joyId, buttonId)); + } + + /** + * Assign the mappings to receive events from the given joystick axis. + * + * @param positiveMapping The mapping to receive events when the axis is negative + * @param negativeMapping The mapping to receive events when the axis is positive + * @param axisId The axis index. + * + * @see Joystick#getAxisCount() + */ + public void assignAxis(String positiveMapping, String negativeMapping, int axisId){ + inputManager.addMapping(positiveMapping, new JoyAxisTrigger(joyId, axisId, false)); + inputManager.addMapping(negativeMapping, new JoyAxisTrigger(joyId, axisId, true)); + } + + /** + * Gets the index number for the X axis on the joystick. + * + * <p>E.g. for most gamepads, the left control stick X axis will be returned. + * + * @return The axis index for the X axis for this joystick. + * + * @see Joystick#assignAxis(java.lang.String, java.lang.String, int) + */ + public int getXAxisIndex(){ + return axisXIndex; + } + + /** + * Gets the index number for the Y axis on the joystick. + * + * <p>E.g. for most gamepads, the left control stick Y axis will be returned. + * + * @return The axis index for the Y axis for this joystick. + * + * @see Joystick#assignAxis(java.lang.String, java.lang.String, int) + */ + public int getYAxisIndex(){ + return axisYIndex; + } + + /** + * Returns the number of axes on this joystick. + * + * @return the number of axes on this joystick. + */ + public int getAxisCount() { + return axisCount; + } + + /** + * Returns the number of buttons on this joystick. + * + * @return the number of buttons on this joystick. + */ + public int getButtonCount() { + return buttonCount; + } + + /** + * Returns the name of this joystick. + * + * @return the name of this joystick. + */ + public String getName() { + return name; + } + + @Override + public String toString(){ + return "Joystick[name=" + name + ", id=" + joyId + ", buttons=" + buttonCount + + ", axes=" + axisCount + "]"; + } + +} |