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