package net.cis.client.game.ctrl;
import net.cis.client.game.common.model.InputStrings;
import net.cis.client.game.model.InputBinding;
import net.cis.client.game.scenery.ctrl.input.KeyListener;
import net.cis.client.game.scenery.ctrl.input.MouseListener;
import net.cis.client.game.scenery.model.PlayerVehicleUpdates;
import net.cis.client.game.ui.ctrl.MouseInputListener;
import com.jme3.input.InputManager;
import com.jme3.input.controls.AnalogListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.input.controls.MouseAxisTrigger;
import com.jme3.input.controls.MouseButtonTrigger;
/**
* Controller to load/initialize/justify input devices. These may be mouse, keyboard, joystick, gamepad or what else.
* Manage changes in input-bindings here.
*/
public class InputCtrl {
private final InputManager inputManager;
private final PlayerVehicleUpdates pvu;
private final InputBinding inputBinding;
public InputCtrl(InputManager inputManager, PlayerVehicleUpdates pvu) {
this.inputManager = inputManager;
this.pvu = pvu;
inputBinding = new InputBinding();
inputManager.clearMappings();
initShipControlMouseListener();
initShipControlKeyListener();
initGameControlListener();
}
public void initGameControlListener() {
inputManager.addMapping(InputStrings.FREE_MOUSE,
new MouseButtonTrigger(inputBinding.getMouseBinding(InputStrings.FREE_MOUSE)));
inputManager.addListener(new MouseInputListener(inputManager), InputStrings.FREE_MOUSE);
}
public void initCameraControlKeyListener(CameraCtrl cameraCtrl) {
inputManager.addMapping(InputStrings.CAMERA_1ST,
new KeyTrigger(inputBinding.getKeyBinding(InputStrings.CAMERA_1ST)));
inputManager.addMapping(InputStrings.CAMERA_3RD,
new KeyTrigger(inputBinding.getKeyBinding(InputStrings.CAMERA_3RD)));
inputManager.addListener(cameraCtrl, InputStrings.CAMERA_1ST, InputStrings.CAMERA_3RD);
}
private void initShipControlKeyListener() {
KeyListener keyListener = new KeyListener(pvu);
inputManager.addMapping(InputStrings.ACCELERATE,
new KeyTrigger(inputBinding.getKeyBinding(InputStrings.ACCELERATE)));
inputManager.addMapping(InputStrings.DECELERATE,
new KeyTrigger(inputBinding.getKeyBinding(InputStrings.DECELERATE)));
inputManager.addListener(keyListener, InputStrings.ACCELERATE, InputStrings.DECELERATE);
}
private void initShipControlMouseListener() {
MouseListener mouseListener = new MouseListener(pvu);
bindMouseAxis(inputManager, mouseListener, inputBinding.getMouseBinding(InputStrings.YAW_LEFT),
InputStrings.YAW_LEFT, true);
bindMouseAxis(inputManager, mouseListener, inputBinding.getMouseBinding(InputStrings.YAW_RIGHT),
InputStrings.YAW_RIGHT, false);
bindMouseAxis(inputManager, mouseListener, inputBinding.getMouseBinding(InputStrings.PITCH_UP),
InputStrings.PITCH_UP, true);
bindMouseAxis(inputManager, mouseListener, inputBinding.getMouseBinding(InputStrings.PITCH_DOWN),
InputStrings.PITCH_DOWN, false);
}
private void bindMouseAxis(InputManager inputManager, AnalogListener listener, int axis, String inputString,
boolean negative) {
inputManager.addMapping(inputString, new MouseAxisTrigger(axis, negative));
inputManager.addListener(listener, inputString);
}
}