aboutsummaryrefslogtreecommitdiff
path: root/engine/src/core/com/jme3/input/Joystick.java
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/core/com/jme3/input/Joystick.java')
-rw-r--r--engine/src/core/com/jme3/input/Joystick.java136
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 + "]";
+ }
+
+}