From f28d74a1f6533be3e3e5cedb66b89836cf857f2e Mon Sep 17 00:00:00 2001 From: Kirill Vainer Date: Sat, 19 Mar 2016 12:57:30 -0400 Subject: [PATCH] joystick: use jinput backend for lwjgl3 --- jme3-jinput/build.gradle | 11 +++++ .../jme3/input/jinput}/JInputJoyInput.java | 49 +++++++++++-------- jme3-lwjgl/build.gradle | 1 + .../system/lwjgl/LwjglAbstractDisplay.java | 2 +- .../com/jme3/system/lwjgl/LwjglContext.java | 3 +- jme3-lwjgl3/build.gradle | 1 + .../com/jme3/system/lwjgl/LwjglContext.java | 3 +- .../com/jme3/system/lwjgl/LwjglWindow.java | 3 +- settings.gradle | 1 + 9 files changed, 48 insertions(+), 26 deletions(-) create mode 100644 jme3-jinput/build.gradle rename {jme3-lwjgl/src/main/java/com/jme3/input/lwjgl => jme3-jinput/src/main/java/com/jme3/input/jinput}/JInputJoyInput.java (93%) diff --git a/jme3-jinput/build.gradle b/jme3-jinput/build.gradle new file mode 100644 index 000000000..62ce1b959 --- /dev/null +++ b/jme3-jinput/build.gradle @@ -0,0 +1,11 @@ +if (!hasProperty('mainClass')) { + ext.mainClass = '' +} + +dependencies { + compile project(':jme3-core') + compile project(':jme3-desktop') + compile 'net.java.jinput:jinput:2.0.6' + + testCompile project(path: ':jme3-core', configuration: 'testOutput') +} diff --git a/jme3-lwjgl/src/main/java/com/jme3/input/lwjgl/JInputJoyInput.java b/jme3-jinput/src/main/java/com/jme3/input/jinput/JInputJoyInput.java similarity index 93% rename from jme3-lwjgl/src/main/java/com/jme3/input/lwjgl/JInputJoyInput.java rename to jme3-jinput/src/main/java/com/jme3/input/jinput/JInputJoyInput.java index 606ebec87..b1d2cc6c6 100644 --- a/jme3-lwjgl/src/main/java/com/jme3/input/lwjgl/JInputJoyInput.java +++ b/jme3-jinput/src/main/java/com/jme3/input/jinput/JInputJoyInput.java @@ -1,4 +1,4 @@ -package com.jme3.input.lwjgl; +package com.jme3.input.jinput; import com.jme3.input.AbstractJoystick; import com.jme3.input.DefaultJoystickAxis; @@ -32,25 +32,13 @@ public class JInputJoyInput implements JoyInput { private JInputJoystick[] joysticks; private RawInputListener listener; - private Map joystickIndex = new HashMap(); - - public void setJoyRumble(int joyId, float amount){ - - if( joyId >= joysticks.length ) - throw new IllegalArgumentException(); - - Controller c = joysticks[joyId].controller; - for (Rumbler r : c.getRumblers()){ - r.rumble(amount); - } - } + private final Map joystickIndex = new HashMap(); + @Override public Joystick[] loadJoysticks(InputManager inputManager){ ControllerEnvironment ce = ControllerEnvironment.getDefaultEnvironment(); - Controller[] cs = ce.getControllers(); - List list = new ArrayList(); for( Controller c : ce.getControllers() ) { if (c.getType() == Controller.Type.KEYBOARD @@ -82,10 +70,12 @@ public class JInputJoyInput implements JoyInput { return joysticks; } + @Override public void initialize() { inited = true; } + @Override public void update() { ControllerEnvironment ce = ControllerEnvironment.getDefaultEnvironment(); @@ -151,25 +141,42 @@ public class JInputJoyInput implements JoyInput { } } + @Override + public void setJoyRumble(int joyId, float amount) { + + if (joyId >= joysticks.length) { + throw new IllegalArgumentException(); + } + + Controller c = joysticks[joyId].controller; + for (Rumbler r : c.getRumblers()) { + r.rumble(amount); + } + } + + @Override public void destroy() { inited = false; } + @Override public boolean isInitialized() { return inited; } + @Override public void setInputListener(RawInputListener listener) { this.listener = listener; } + @Override public long getInputTimeNanos() { return 0; } - protected class JInputJoystick extends AbstractJoystick { + private static class JInputJoystick extends AbstractJoystick { - private JoystickAxis nullAxis; + private final JoystickAxis nullAxis; private Controller controller; private JoystickAxis xAxis; private JoystickAxis yAxis; @@ -216,8 +223,8 @@ public class JInputJoyInput implements JoyInput { String name = comp.getName(); String original = id.getName(); String logicalId = JoystickCompatibilityMappings.remapComponent( controller.getName(), original ); - if( name != original ) { - logger.log(Level.FINE, "Remapped:" + original + " to:" + logicalId); + if (!logicalId.equals(original)) { + logger.log(Level.FINE, "Remapped:{0} to:{1}", new Object[]{original, logicalId}); } JoystickButton button = new DefaultJoystickButton( getInputManager(), this, getButtonCount(), @@ -238,8 +245,8 @@ public class JInputJoyInput implements JoyInput { String name = comp.getName(); String original = id.getName(); String logicalId = JoystickCompatibilityMappings.remapComponent( controller.getName(), original ); - if( name != original ) { - logger.log(Level.FINE, "Remapped:" + original + " to:" + logicalId); + if (!logicalId.equals(original)) { + logger.log(Level.FINE, "Remapped:{0} to:{1}", new Object[]{original, logicalId}); } JoystickAxis axis = new DefaultJoystickAxis( getInputManager(), diff --git a/jme3-lwjgl/build.gradle b/jme3-lwjgl/build.gradle index eb5651fd4..509336cf5 100644 --- a/jme3-lwjgl/build.gradle +++ b/jme3-lwjgl/build.gradle @@ -5,6 +5,7 @@ if (!hasProperty('mainClass')) { dependencies { compile project(':jme3-core') compile project(':jme3-desktop') + compile project(':jme3-jinput') compile 'org.lwjgl.lwjgl:lwjgl:2.9.3' testCompile project(path: ':jme3-core', configuration: 'testOutput') diff --git a/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglAbstractDisplay.java b/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglAbstractDisplay.java index 802b12a0f..39f04b0ad 100644 --- a/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglAbstractDisplay.java +++ b/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglAbstractDisplay.java @@ -36,9 +36,9 @@ import com.jme3.input.JoyInput; import com.jme3.input.KeyInput; import com.jme3.input.MouseInput; import com.jme3.input.TouchInput; -import com.jme3.input.lwjgl.JInputJoyInput; import com.jme3.input.lwjgl.LwjglKeyInput; import com.jme3.input.lwjgl.LwjglMouseInput; +import com.jme3.input.jinput.JInputJoyInput; import com.jme3.system.AppSettings; import com.jme3.system.JmeSystem; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java b/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java index 354910bbc..9e66a69ae 100644 --- a/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java +++ b/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java @@ -31,7 +31,7 @@ */ package com.jme3.system.lwjgl; -import com.jme3.input.lwjgl.JInputJoyInput; +import com.jme3.input.jinput.JInputJoyInput; import com.jme3.input.lwjgl.LwjglKeyInput; import com.jme3.input.lwjgl.LwjglMouseInput; import com.jme3.renderer.Renderer; @@ -52,7 +52,6 @@ import com.jme3.renderer.opengl.GLTiming; import com.jme3.renderer.opengl.GLTimingState; import com.jme3.renderer.opengl.GLTracer; import com.jme3.system.*; -import java.io.File; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; diff --git a/jme3-lwjgl3/build.gradle b/jme3-lwjgl3/build.gradle index b70cd4303..17870020d 100644 --- a/jme3-lwjgl3/build.gradle +++ b/jme3-lwjgl3/build.gradle @@ -7,6 +7,7 @@ def lwjglVersion = '3.0.0b' dependencies { compile project(':jme3-core') compile project(':jme3-desktop') + compile project(':jme3-jinput') compile "org.lwjgl:lwjgl:${lwjglVersion}" compile "org.lwjgl:lwjgl-platform:${lwjglVersion}:natives-windows" diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglContext.java b/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglContext.java index 0fe8a7b23..4279a39c4 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglContext.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglContext.java @@ -32,6 +32,7 @@ package com.jme3.system.lwjgl; +import com.jme3.input.jinput.JInputJoyInput; import com.jme3.input.lwjgl.GlfwJoystickInput; import com.jme3.input.lwjgl.GlfwKeyInput; import com.jme3.input.lwjgl.GlfwMouseInput; @@ -74,7 +75,7 @@ public abstract class LwjglContext implements JmeContext { protected Renderer renderer; protected GlfwKeyInput keyInput; protected GlfwMouseInput mouseInput; - protected GlfwJoystickInput joyInput; + protected JInputJoyInput joyInput; protected Timer timer; protected SystemListener listener; diff --git a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java b/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java index aaa24ce42..c3cdb7698 100644 --- a/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java +++ b/jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java @@ -36,6 +36,7 @@ import com.jme3.input.JoyInput; import com.jme3.input.KeyInput; import com.jme3.input.MouseInput; import com.jme3.input.TouchInput; +import com.jme3.input.jinput.JInputJoyInput; import com.jme3.input.lwjgl.GlfwJoystickInput; import com.jme3.input.lwjgl.GlfwKeyInput; import com.jme3.input.lwjgl.GlfwMouseInput; @@ -465,7 +466,7 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable { public JoyInput getJoyInput() { if (joyInput == null) { - joyInput = new GlfwJoystickInput(); + joyInput = new JInputJoyInput(); } return joyInput; } diff --git a/settings.gradle b/settings.gradle index 4c5497cfb..02bcf101c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,6 +14,7 @@ include 'jme3-terrain' include 'jme3-desktop' include 'jme3-blender' include 'jme3-jogl' +include 'jme3-jinput' include 'jme3-lwjgl' include 'jme3-lwjgl3'