blob: 658781fedf0ea9788ce2551be1d621b23de70052 [file] [log] [blame]
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 + "]";
}
}