Add inputHandler
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
package pp.mdga.client;
|
||||
|
||||
import com.jme3.input.InputManager;
|
||||
import com.jme3.input.KeyInput;
|
||||
import com.jme3.input.MouseInput;
|
||||
import com.jme3.input.controls.*;
|
||||
|
||||
public class InputSyncronizer {
|
||||
|
||||
private MdgaApp app;
|
||||
private InputManager inputManager;
|
||||
|
||||
protected boolean rightMousePressed = false;
|
||||
private float rotationAngle = 0f;
|
||||
private int scrollValue = 50;
|
||||
|
||||
InputSyncronizer(MdgaApp app) {
|
||||
this.app = app;
|
||||
|
||||
this.inputManager = app.getInputManager();
|
||||
|
||||
setupInput();
|
||||
}
|
||||
|
||||
public void update() {
|
||||
rotateModel();
|
||||
updateScrollValue();
|
||||
}
|
||||
|
||||
private void setupInput() {
|
||||
inputManager.addMapping("Settings", new KeyTrigger(KeyInput.KEY_ESCAPE));
|
||||
|
||||
inputManager.addMapping("RotateRightMouse", new MouseButtonTrigger(MouseInput.BUTTON_RIGHT));
|
||||
inputManager.addMapping("MouseLeft", new MouseAxisTrigger(MouseInput.AXIS_X, false)); // Left movement
|
||||
inputManager.addMapping("MouseRight", new MouseAxisTrigger(MouseInput.AXIS_X, true)); // Right movement
|
||||
inputManager.addMapping("MouseScrollUp", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, false)); // Scroll up
|
||||
inputManager.addMapping("MouseScrollDown", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, true)); // Scroll down
|
||||
|
||||
inputManager.addListener(actionListener, "Settings", "RotateRightMouse");
|
||||
inputManager.addListener(analogListener, "MouseLeft", "MouseRight", "MouseScrollUp", "MouseScrollDown");
|
||||
}
|
||||
|
||||
private final ActionListener actionListener = new ActionListener() {
|
||||
@Override
|
||||
public void onAction(String name, boolean isPressed, float tpf) {
|
||||
if (name.equals("Settings") && isPressed) {
|
||||
app.getView().pressEscape();
|
||||
}
|
||||
if (name.equals("RotateRightMouse")) {
|
||||
rightMousePressed = isPressed;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private final AnalogListener analogListener = new AnalogListener() {
|
||||
@Override
|
||||
public void onAnalog(String name, float value, float tpf) {
|
||||
if (name.equals("MouseLeft") && rightMousePressed) {
|
||||
rotationAngle -= value * 360f;
|
||||
rotateModel();
|
||||
} else if (name.equals("MouseRight") && rightMousePressed) {
|
||||
rotationAngle += value * 360f;
|
||||
rotateModel();
|
||||
} else if (name.equals("MouseScrollUp")) {
|
||||
scrollValue = Math.min(100, scrollValue + 1);
|
||||
updateScrollValue();
|
||||
} else if (name.equals("MouseScrollDown")) {
|
||||
scrollValue = Math.max(1, scrollValue - 1);
|
||||
updateScrollValue();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void rotateModel() {
|
||||
//System.out.println("Rotation Angle: " + rotationAngle);
|
||||
}
|
||||
|
||||
private void updateScrollValue() {
|
||||
//System.out.println("Scroll Value: " + scrollValue);
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ public class MdgaApp extends SimpleApplication {
|
||||
private AnimationHandler animationHandler;
|
||||
private AcousticHandler acousticHandler;
|
||||
private NotificationSynchronizer notificationSynchronizer;
|
||||
private InputSyncronizer inputSyncronizer;
|
||||
|
||||
MdgaView view = null;
|
||||
private MdgaState state = MdgaState.MAIN;
|
||||
@@ -41,7 +42,9 @@ public void simpleInitApp() {
|
||||
animationHandler = new AnimationHandler(this);
|
||||
acousticHandler = new AcousticHandler(this);
|
||||
notificationSynchronizer = new NotificationSynchronizer(this);
|
||||
inputSyncronizer = new InputSyncronizer(this);
|
||||
|
||||
inputManager.deleteMapping("SIMPLEAPP_Exit");
|
||||
GuiGlobals.initialize(this);
|
||||
|
||||
enter(state);
|
||||
@@ -49,6 +52,7 @@ public void simpleInitApp() {
|
||||
|
||||
@Override
|
||||
public void simpleUpdate(float tpf) {
|
||||
inputSyncronizer.update();
|
||||
view.update();
|
||||
acousticHandler.update();
|
||||
}
|
||||
@@ -95,4 +99,8 @@ public AcousticHandler getAcousticHandler() {
|
||||
public float getResolutionFactor() {
|
||||
return resolutionFactor;
|
||||
}
|
||||
|
||||
public MdgaView getView() {
|
||||
return view;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public MainView(MdgaApp app) {
|
||||
dialog = new InputButtonDialog(app, node);
|
||||
dialog.addButton("Spiel beitreten", () -> app.enter(MdgaState.LOBBY), size);
|
||||
dialog.addButton("Spiel hosten", () -> app.enter(MdgaState.LOBBY), size);
|
||||
dialog.addButton("Einstellungen", () -> enterSettings(), size);
|
||||
dialog.addButton("Einstellungen", () -> enterSettings(false), size);
|
||||
dialog.addButton("Spiel beenden", () -> app.stop(), size);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,10 @@ public abstract class MdgaView {
|
||||
protected MdgaApp app;
|
||||
protected Node node;
|
||||
|
||||
int depth = 0;
|
||||
boolean isVideo = false;
|
||||
boolean isAudio = false;
|
||||
|
||||
private Node settingsNode;
|
||||
private Node audioNode;
|
||||
private Node videoNode;
|
||||
@@ -38,7 +42,7 @@ public MdgaView(MdgaApp app) {
|
||||
this.audioNode = new Node();
|
||||
this.videoNode = new Node();
|
||||
|
||||
this.settingsButton = new SettingsButtonDialog(app, node, "", () -> enterSettings());
|
||||
this.settingsButton = new SettingsButtonDialog(app, node, "", () -> enterSettings(false));
|
||||
|
||||
this.settingsBackground = createBackground("background/zahnräder.png");
|
||||
settingsNode.attachChild(settingsBackground);
|
||||
@@ -103,11 +107,15 @@ protected Geometry createBackground(String texturePath) {
|
||||
return background;
|
||||
}
|
||||
|
||||
protected void enterSettings() {
|
||||
protected void enterSettings(boolean soft) {
|
||||
leave();
|
||||
|
||||
app.getGuiNode().attachChild(settingsNode);
|
||||
|
||||
if(!soft) {
|
||||
depth++;
|
||||
}
|
||||
|
||||
settings.show();
|
||||
}
|
||||
|
||||
@@ -118,12 +126,16 @@ protected void leaveSettings(boolean soft) {
|
||||
|
||||
if(!soft) {
|
||||
enter();
|
||||
depth--;
|
||||
}
|
||||
}
|
||||
|
||||
protected void enterAudio() {
|
||||
leaveSettings(true);
|
||||
|
||||
depth++;
|
||||
isAudio = true;
|
||||
|
||||
app.getGuiNode().attachChild(audioNode);
|
||||
|
||||
audio.show();
|
||||
@@ -134,7 +146,10 @@ protected void leaveAudio() {
|
||||
|
||||
app.getGuiNode().detachChild(audioNode);
|
||||
|
||||
enterSettings();
|
||||
isAudio = false;
|
||||
depth--;
|
||||
|
||||
enterSettings(true);
|
||||
}
|
||||
|
||||
protected void enterVideo() {
|
||||
@@ -142,6 +157,10 @@ protected void enterVideo() {
|
||||
|
||||
app.getGuiNode().attachChild(videoNode);
|
||||
|
||||
depth++;
|
||||
|
||||
isVideo = true;
|
||||
|
||||
video.show();
|
||||
}
|
||||
|
||||
@@ -150,6 +169,27 @@ protected void leaveVideo() {
|
||||
|
||||
app.getGuiNode().detachChild(videoNode);
|
||||
|
||||
enterSettings();
|
||||
depth--;
|
||||
isVideo = false;
|
||||
|
||||
enterSettings(true);
|
||||
}
|
||||
|
||||
public void pressEscape() {
|
||||
if(depth == 0) {
|
||||
enterSettings(false);
|
||||
} else if(depth == 1) {
|
||||
leaveSettings(false);
|
||||
}
|
||||
else if (depth == 2){
|
||||
if(isVideo) {
|
||||
leaveVideo();
|
||||
}
|
||||
if(isAudio) {
|
||||
leaveAudio();
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user