From 2648f67b34cb64db0c06cfc8768f30722f19fd20 Mon Sep 17 00:00:00 2001 From: Nehon Date: Thu, 26 Nov 2015 20:47:44 +0100 Subject: [PATCH 01/13] Javadoc in RenderManager : Fixed some typos and added some for light mode methods. --- .../java/com/jme3/renderer/RenderManager.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index b6ad6ace4..f45013e84 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -746,27 +746,43 @@ public class RenderManager { } /** - * Sets the light filter to use when rendering Lighted Geometries + * Sets the light filter to use when rendering lighted Geometries * * @see LightFilter - * @param lightFilter The light filter tose. Set it to null if you want all lights to be rendered + * @param lightFilter The light filter. Set it to null if you want all lights to be rendered */ public void setLightFilter(LightFilter lightFilter) { this.lightFilter = lightFilter; } + /** + * Defines what light mode will be selected when a technique offers several light modes + * @param preferredLightMode + */ public void setPreferredLightMode(TechniqueDef.LightMode preferredLightMode) { this.preferredLightMode = preferredLightMode; } + /** + * returns the preferred light mode + * @return the light mode + */ public TechniqueDef.LightMode getPreferredLightMode() { return preferredLightMode; } + /** + * returns the number of lights used for each pass when the light mode is single pass. + * @return the number of lights. + */ public int getSinglePassLightBatchSize() { return singlePassLightBatchSize; } + /** + * Sets the number of lights to use for each pass when the light mode is single pass. + * @param singlePassLightBatchSize the number of lights + */ public void setSinglePassLightBatchSize(int singlePassLightBatchSize) { this.singlePassLightBatchSize = singlePassLightBatchSize; } From 6b262e56c82028cab5e05d116ed5cf3da8d66dd0 Mon Sep 17 00:00:00 2001 From: Nehon Date: Thu, 26 Nov 2015 21:00:27 +0100 Subject: [PATCH 02/13] Fixed the javadoc fixes :D --- .../main/java/com/jme3/renderer/RenderManager.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index f45013e84..6d80d026f 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -746,26 +746,26 @@ public class RenderManager { } /** - * Sets the light filter to use when rendering lighted Geometries + * Sets the light filter to use when rendering lit Geometries. * * @see LightFilter - * @param lightFilter The light filter. Set it to null if you want all lights to be rendered + * @param lightFilter The light filter. Set it to null if you want all lights to be rendered. */ public void setLightFilter(LightFilter lightFilter) { this.lightFilter = lightFilter; } /** - * Defines what light mode will be selected when a technique offers several light modes - * @param preferredLightMode + * Defines what light mode will be selected when a technique offers several light modes. + * @param preferredLightMode The light mode to use. */ public void setPreferredLightMode(TechniqueDef.LightMode preferredLightMode) { this.preferredLightMode = preferredLightMode; } /** - * returns the preferred light mode - * @return the light mode + * returns the preferred light mode. + * @return the light mode. */ public TechniqueDef.LightMode getPreferredLightMode() { return preferredLightMode; @@ -781,7 +781,7 @@ public class RenderManager { /** * Sets the number of lights to use for each pass when the light mode is single pass. - * @param singlePassLightBatchSize the number of lights + * @param singlePassLightBatchSize the number of lights. */ public void setSinglePassLightBatchSize(int singlePassLightBatchSize) { this.singlePassLightBatchSize = singlePassLightBatchSize; From 153cb27d786c9c0753ca19842dd9855ee996c104 Mon Sep 17 00:00:00 2001 From: jmekaelthas Date: Sun, 29 Nov 2015 19:34:03 +0100 Subject: [PATCH 03/13] Bugfix: fixed error in Inverse Kinematics constraint (animations with these constraint should look better now, although not yet perfect ;). --- .../definitions/ConstraintDefinitionIK.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/constraints/definitions/ConstraintDefinitionIK.java b/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/constraints/definitions/ConstraintDefinitionIK.java index 69e087a28..69c0a6f50 100644 --- a/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/constraints/definitions/ConstraintDefinitionIK.java +++ b/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/constraints/definitions/ConstraintDefinitionIK.java @@ -174,7 +174,7 @@ public class ConstraintDefinitionIK extends ConstraintDefinition { private static class BonesChain extends ArrayList { private static final long serialVersionUID = -1850524345643600718L; - private List bonesMatrices = new ArrayList(); + private List localBonesMatrices = new ArrayList(); public BonesChain(Bone bone, boolean useTail, int bonesAffected, Collection alteredOmas, BlenderContext blenderContext) { if (bone != null) { @@ -187,12 +187,21 @@ public class ConstraintDefinitionIK extends ConstraintDefinition { this.add(boneContext); alteredOmas.add(boneContext.getBoneOma()); - Space space = this.size() < bonesAffected ? Space.CONSTRAINT_SPACE_LOCAL : Space.CONSTRAINT_SPACE_WORLD; - Transform transform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), space); - bonesMatrices.add(new DTransform(transform).toMatrix()); + Transform transform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), Space.CONSTRAINT_SPACE_WORLD); + localBonesMatrices.add(new DTransform(transform).toMatrix()); bone = bone.getParent(); } + + if(localBonesMatrices.size() > 0) { + // making the matrices describe the local transformation + Matrix parentWorldMatrix = localBonesMatrices.get(localBonesMatrices.size() - 1); + for(int i=localBonesMatrices.size() - 2;i>=0;--i) { + SimpleMatrix m = parentWorldMatrix.invert().mult(localBonesMatrices.get(i)); + parentWorldMatrix = localBonesMatrices.get(i); + localBonesMatrices.set(i, new Matrix(m)); + } + } } } @@ -211,16 +220,16 @@ public class ConstraintDefinitionIK extends ConstraintDefinition { SimpleMatrix m = parentWorldMatrix.invert().mult(boneMatrix); boneMatrix = new Matrix(m); } - bonesMatrices.set(index, boneMatrix); + localBonesMatrices.set(index, boneMatrix); } public Matrix getWorldMatrix(int index) { if (index == this.size() - 1) { - return new Matrix(bonesMatrices.get(this.size() - 1)); + return new Matrix(localBonesMatrices.get(this.size() - 1)); } SimpleMatrix result = this.getWorldMatrix(index + 1); - result = result.mult(bonesMatrices.get(index)); + result = result.mult(localBonesMatrices.get(index)); return new Matrix(result); } } From 7e185b25df7fa886c72e7efdb3e17ceba21a0c92 Mon Sep 17 00:00:00 2001 From: jmekaelthas Date: Tue, 1 Dec 2015 20:50:01 +0100 Subject: [PATCH 04/13] Bugfix: fixed a bug that caused Bezier objects to use only the vertices of its first bezier line (out of many). --- .../jme3/scene/plugins/blender/curves/CurvesTemporalMesh.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/curves/CurvesTemporalMesh.java b/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/curves/CurvesTemporalMesh.java index 41117bf85..51a5aeb63 100644 --- a/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/curves/CurvesTemporalMesh.java +++ b/jme3-blender/src/main/java/com/jme3/scene/plugins/blender/curves/CurvesTemporalMesh.java @@ -180,8 +180,8 @@ public class CurvesTemporalMesh extends TemporalMesh { if (bevelObject != null && beziers.size() > 0) { this.append(this.applyBevelAndTaper(this, bevelObject, taperObject, blenderContext)); } else { - int originalVerticesAmount = vertices.size(); for (BezierLine bezierLine : beziers) { + int originalVerticesAmount = vertices.size(); vertices.add(bezierLine.vertices[0]); Vector3f v = bezierLine.vertices[1].subtract(bezierLine.vertices[0]).normalizeLocal(); float temp = v.x; From 8958459ef99b94bce2487d2ed9699a6e7d8c63df Mon Sep 17 00:00:00 2001 From: jmekaelthas Date: Tue, 1 Dec 2015 22:31:54 +0100 Subject: [PATCH 05/13] Bugfix: fixed a bug that caused NURB lines did not use their proper resolution. --- .../main/java/com/jme3/scene/shape/Curve.java | 57 +++++++++++-------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java index 009b41c64..d6eb8dc20 100644 --- a/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java +++ b/jme3-core/src/main/java/com/jme3/scene/shape/Curve.java @@ -198,35 +198,42 @@ public class Curve extends Mesh { * points */ private void createNurbMesh(int nbSubSegments) { - float minKnot = spline.getMinNurbKnot(); - float maxKnot = spline.getMaxNurbKnot(); - float deltaU = (maxKnot - minKnot) / nbSubSegments; + if(spline.getControlPoints() != null && spline.getControlPoints().size() > 0) { + if(nbSubSegments == 0) { + nbSubSegments = spline.getControlPoints().size() + 1; + } else { + nbSubSegments = spline.getControlPoints().size() * nbSubSegments + 1; + } + float minKnot = spline.getMinNurbKnot(); + float maxKnot = spline.getMaxNurbKnot(); + float deltaU = (maxKnot - minKnot) / nbSubSegments; - float[] array = new float[(nbSubSegments + 1) * 3]; + float[] array = new float[(nbSubSegments + 1) * 3]; - float u = minKnot; - Vector3f interpolationResult = new Vector3f(); - for (int i = 0; i < array.length; i += 3) { - spline.interpolate(u, 0, interpolationResult); - array[i] = interpolationResult.x; - array[i + 1] = interpolationResult.y; - array[i + 2] = interpolationResult.z; - u += deltaU; - } + float u = minKnot; + Vector3f interpolationResult = new Vector3f(); + for (int i = 0; i < array.length; i += 3) { + spline.interpolate(u, 0, interpolationResult); + array[i] = interpolationResult.x; + array[i + 1] = interpolationResult.y; + array[i + 2] = interpolationResult.z; + u += deltaU; + } - //calculating indexes - int i = 0; - short[] indices = new short[nbSubSegments << 1]; - for (int j = 0; j < nbSubSegments; ++j) { - indices[i++] = (short) j; - indices[i++] = (short) (j + 1); - } + //calculating indexes + int i = 0; + short[] indices = new short[nbSubSegments << 1]; + for (int j = 0; j < nbSubSegments; ++j) { + indices[i++] = (short) j; + indices[i++] = (short) (j + 1); + } - this.setMode(Mesh.Mode.Lines); - this.setBuffer(VertexBuffer.Type.Position, 3, array); - this.setBuffer(VertexBuffer.Type.Index, 2, indices); - this.updateBound(); - this.updateCounts(); + this.setMode(Mesh.Mode.Lines); + this.setBuffer(VertexBuffer.Type.Position, 3, array); + this.setBuffer(VertexBuffer.Type.Index, 2, indices); + this.updateBound(); + this.updateCounts(); + } } private void createLinearMesh() { From 15afcfb7357b36dd9c06f0856fe9c0b539ceebd7 Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 04:05:49 -0500 Subject: [PATCH 06/13] Added the error information to the toString() if there is error information to show. --- .../com/jme3/network/service/rpc/msg/RpcResponseMessage.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jme3-networking/src/main/java/com/jme3/network/service/rpc/msg/RpcResponseMessage.java b/jme3-networking/src/main/java/com/jme3/network/service/rpc/msg/RpcResponseMessage.java index efb0def6a..c8ca8083a 100644 --- a/jme3-networking/src/main/java/com/jme3/network/service/rpc/msg/RpcResponseMessage.java +++ b/jme3-networking/src/main/java/com/jme3/network/service/rpc/msg/RpcResponseMessage.java @@ -84,6 +84,7 @@ public class RpcResponseMessage extends AbstractMessage { @Override public String toString() { return getClass().getSimpleName() + "[#" + msgId + ", result=" + result + + (error != null ? ", error=" + error : "") + "]"; } } From 99742a76f2c2bc748d4846fca03242393ec3961b Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 04:15:28 -0500 Subject: [PATCH 07/13] Added additional trace logging. --- .../java/com/jme3/network/base/DefaultClient.java | 5 +++++ .../java/com/jme3/network/base/DefaultServer.java | 4 ++++ .../jme3/network/base/MessageListenerRegistry.java | 14 +++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/jme3-networking/src/main/java/com/jme3/network/base/DefaultClient.java b/jme3-networking/src/main/java/com/jme3/network/base/DefaultClient.java index 9881830a8..3e76f8be7 100644 --- a/jme3-networking/src/main/java/com/jme3/network/base/DefaultClient.java +++ b/jme3-networking/src/main/java/com/jme3/network/base/DefaultClient.java @@ -389,6 +389,7 @@ public class DefaultClient implements Client protected void startServices() { + log.fine("Starting client services."); // Let the services know we are finally started services.start(); } @@ -447,6 +448,10 @@ public class DefaultClient implements Client protected void dispatch( Message m ) { + if( log.isLoggable(Level.FINER) ) { + log.log(Level.FINER, "{0} received:{1}", new Object[]{this, m}); + } + // Pull off the connection management messages we're // interested in and then pass on the rest. if( m instanceof ClientRegistrationMessage ) { diff --git a/jme3-networking/src/main/java/com/jme3/network/base/DefaultServer.java b/jme3-networking/src/main/java/com/jme3/network/base/DefaultServer.java index 5c62733e8..e95c0f97f 100644 --- a/jme3-networking/src/main/java/com/jme3/network/base/DefaultServer.java +++ b/jme3-networking/src/main/java/com/jme3/network/base/DefaultServer.java @@ -326,6 +326,10 @@ public class DefaultServer implements Server protected void dispatch( HostedConnection source, Message m ) { + if( log.isLoggable(Level.FINER) ) { + log.log(Level.FINER, "{0} received:{1}", new Object[]{source, m}); + } + if( source == null ) { messageListeners.messageReceived( source, m ); } else { diff --git a/jme3-networking/src/main/java/com/jme3/network/base/MessageListenerRegistry.java b/jme3-networking/src/main/java/com/jme3/network/base/MessageListenerRegistry.java index f151e1c84..4a2e40491 100644 --- a/jme3-networking/src/main/java/com/jme3/network/base/MessageListenerRegistry.java +++ b/jme3-networking/src/main/java/com/jme3/network/base/MessageListenerRegistry.java @@ -50,26 +50,34 @@ import java.util.logging.Logger; */ public class MessageListenerRegistry implements MessageListener { - static Logger log = Logger.getLogger(MessageListenerRegistry.class.getName()); + static final Logger log = Logger.getLogger(MessageListenerRegistry.class.getName()); - private List> listeners = new CopyOnWriteArrayList>(); - private Map>> typeListeners + private final List> listeners = new CopyOnWriteArrayList>(); + private final Map>> typeListeners = new ConcurrentHashMap>>(); public MessageListenerRegistry() { } + @Override public void messageReceived( S source, Message m ) { boolean delivered = false; + boolean trace = log.isLoggable(Level.FINER); for( MessageListener l : listeners ) { + if( trace ) { + log.log(Level.FINER, "Delivering {0} to:{1}", new Object[]{m, l}); + } l.messageReceived( source, m ); delivered = true; } for( MessageListener l : getListeners(m.getClass(),false) ) { + if( trace ) { + log.log(Level.FINER, "Delivering {0} to:{1}", new Object[]{m, l}); + } l.messageReceived( source, m ); delivered = true; } From 14e84a4dd77691c760bc7b1cdccfbd1308932c62 Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 04:15:48 -0500 Subject: [PATCH 08/13] Added a constructor that just takes the service's default channel. --- .../java/com/jme3/network/service/rmi/RmiHostedService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jme3-networking/src/main/java/com/jme3/network/service/rmi/RmiHostedService.java b/jme3-networking/src/main/java/com/jme3/network/service/rmi/RmiHostedService.java index 997658a77..ebd0e5908 100644 --- a/jme3-networking/src/main/java/com/jme3/network/service/rmi/RmiHostedService.java +++ b/jme3-networking/src/main/java/com/jme3/network/service/rmi/RmiHostedService.java @@ -89,6 +89,10 @@ public class RmiHostedService extends AbstractHostedService { this((short)-1, (byte)MessageConnection.CHANNEL_DEFAULT_RELIABLE, true); } + public RmiHostedService( byte defaultChannel ) { + this((short)-1, defaultChannel, true); + } + public RmiHostedService( short rmiId, byte defaultChannel, boolean autoHost ) { this.rmiId = rmiId; this.defaultChannel = defaultChannel; From 84ccd7187342c34ad2f7f37d7a280d71352a4661 Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 04:16:56 -0500 Subject: [PATCH 09/13] Added additional information to the range check exception. --- .../main/java/com/jme3/texture/image/DefaultImageRaster.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java b/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java index c79a4675d..2d70d53d7 100644 --- a/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java +++ b/jme3-core/src/main/java/com/jme3/texture/image/DefaultImageRaster.java @@ -51,7 +51,8 @@ public class DefaultImageRaster extends ImageRaster { private void rangeCheck(int x, int y) { if (x < 0 || y < 0 || x >= width || y >= height) { - throw new IllegalArgumentException("x and y must be inside the image dimensions"); + throw new IllegalArgumentException("x and y must be inside the image dimensions:" + + x + ", " + y + " in:" + width + ", " + height); } } From 2a2c71dadf1305c23372054c9a5c6e78a162c323 Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 06:26:55 -0500 Subject: [PATCH 10/13] Modified to pay attention to the joystick axis' dead zone if it is larger than the globally defined dead zone. --- .../java/com/jme3/input/InputManager.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/input/InputManager.java b/jme3-core/src/main/java/com/jme3/input/InputManager.java index 660731a08..d3398c4f7 100644 --- a/jme3-core/src/main/java/com/jme3/input/InputManager.java +++ b/jme3-core/src/main/java/com/jme3/input/InputManager.java @@ -96,7 +96,7 @@ public class InputManager implements RawInputListener { private boolean eventsPermitted = false; private boolean mouseVisible = true; private boolean safeMode = false; - private float axisDeadZone = 0.05f; + private float globalAxisDeadZone = 0.05f; private Vector2f cursorPos = new Vector2f(); private Joystick[] joysticks; private final IntMap> bindings = new IntMap>(); @@ -248,8 +248,8 @@ public class InputManager implements RawInputListener { } } - private void invokeAnalogsAndActions(int hash, float value, boolean applyTpf) { - if (value < axisDeadZone) { + private void invokeAnalogsAndActions(int hash, float value, float effectiveDeadZone, boolean applyTpf) { + if (value < effectiveDeadZone) { invokeAnalogs(hash, value, !applyTpf); return; } @@ -304,17 +304,18 @@ public class InputManager implements RawInputListener { int joyId = evt.getJoyIndex(); int axis = evt.getAxisIndex(); float value = evt.getValue(); - if (value < axisDeadZone && value > -axisDeadZone) { + float effectiveDeadZone = Math.max(globalAxisDeadZone, evt.getAxis().getDeadZone()); + if (value < effectiveDeadZone && value > -effectiveDeadZone) { int hash1 = JoyAxisTrigger.joyAxisHash(joyId, axis, true); int hash2 = JoyAxisTrigger.joyAxisHash(joyId, axis, false); Float val1 = axisValues.get(hash1); Float val2 = axisValues.get(hash2); - if (val1 != null && val1.floatValue() > axisDeadZone) { + if (val1 != null && val1.floatValue() > effectiveDeadZone) { invokeActions(hash1, false); } - if (val2 != null && val2.floatValue() > axisDeadZone) { + if (val2 != null && val2.floatValue() > effectiveDeadZone) { invokeActions(hash2, false); } @@ -328,11 +329,11 @@ public class InputManager implements RawInputListener { // Clear the reverse direction's actions in case we // crossed center too quickly Float otherVal = axisValues.get(otherHash); - if (otherVal != null && otherVal.floatValue() > axisDeadZone) { + if (otherVal != null && otherVal.floatValue() > effectiveDeadZone) { invokeActions(otherHash, false); } - invokeAnalogsAndActions(hash, -value, true); + invokeAnalogsAndActions(hash, -value, effectiveDeadZone, true); axisValues.put(hash, -value); axisValues.remove(otherHash); } else { @@ -342,11 +343,11 @@ public class InputManager implements RawInputListener { // Clear the reverse direction's actions in case we // crossed center too quickly Float otherVal = axisValues.get(otherHash); - if (otherVal != null && otherVal.floatValue() > axisDeadZone) { + if (otherVal != null && otherVal.floatValue() > effectiveDeadZone) { invokeActions(otherHash, false); } - invokeAnalogsAndActions(hash, value, true); + invokeAnalogsAndActions(hash, value, effectiveDeadZone, true); axisValues.put(hash, value); axisValues.remove(otherHash); } @@ -391,15 +392,15 @@ public class InputManager implements RawInputListener { if (evt.getDX() != 0) { float val = Math.abs(evt.getDX()) / 1024f; - invokeAnalogsAndActions(MouseAxisTrigger.mouseAxisHash(MouseInput.AXIS_X, evt.getDX() < 0), val, false); + invokeAnalogsAndActions(MouseAxisTrigger.mouseAxisHash(MouseInput.AXIS_X, evt.getDX() < 0), val, globalAxisDeadZone, false); } if (evt.getDY() != 0) { float val = Math.abs(evt.getDY()) / 1024f; - invokeAnalogsAndActions(MouseAxisTrigger.mouseAxisHash(MouseInput.AXIS_Y, evt.getDY() < 0), val, false); + invokeAnalogsAndActions(MouseAxisTrigger.mouseAxisHash(MouseInput.AXIS_Y, evt.getDY() < 0), val, globalAxisDeadZone, false); } if (evt.getDeltaWheel() != 0) { float val = Math.abs(evt.getDeltaWheel()) / 100f; - invokeAnalogsAndActions(MouseAxisTrigger.mouseAxisHash(MouseInput.AXIS_WHEEL, evt.getDeltaWheel() < 0), val, false); + invokeAnalogsAndActions(MouseAxisTrigger.mouseAxisHash(MouseInput.AXIS_WHEEL, evt.getDeltaWheel() < 0), val, globalAxisDeadZone, false); } } @@ -477,7 +478,7 @@ public class InputManager implements RawInputListener { * @param deadZone the deadzone for joystick axes. */ public void setAxisDeadZone(float deadZone) { - this.axisDeadZone = deadZone; + this.globalAxisDeadZone = deadZone; } /** @@ -486,7 +487,7 @@ public class InputManager implements RawInputListener { * @return the deadzone for joystick axes. */ public float getAxisDeadZone() { - return axisDeadZone; + return globalAxisDeadZone; } /** From 46794e251d240252ebddc75a88215b942f6a9804 Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 06:27:17 -0500 Subject: [PATCH 11/13] Allow the caller to override the axis' default dead zone configured at startup. --- .../src/main/java/com/jme3/input/DefaultJoystickAxis.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/jme3-core/src/main/java/com/jme3/input/DefaultJoystickAxis.java b/jme3-core/src/main/java/com/jme3/input/DefaultJoystickAxis.java index 8f32c2d6b..7d7901911 100644 --- a/jme3-core/src/main/java/com/jme3/input/DefaultJoystickAxis.java +++ b/jme3-core/src/main/java/com/jme3/input/DefaultJoystickAxis.java @@ -135,6 +135,14 @@ public class DefaultJoystickAxis implements JoystickAxis { return deadZone; } + /** + * Sets/overrides the dead zone for this axis. This indicates that values + * within +/- deadZone should be ignored. + */ + public void setDeadZone( float f ) { + this.deadZone = f; + } + @Override public String toString(){ return "JoystickAxis[name=" + name + ", parent=" + parent.getName() + ", id=" + axisIndex From 3189323c2fce5fb9f588952ae987a985db4cdb1c Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 20:00:52 -0500 Subject: [PATCH 12/13] Converted manual array + list management over to just use SafeArrayList. It was a class added after this code. --- .../java/com/jme3/input/InputManager.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/input/InputManager.java b/jme3-core/src/main/java/com/jme3/input/InputManager.java index d3398c4f7..c430e267c 100644 --- a/jme3-core/src/main/java/com/jme3/input/InputManager.java +++ b/jme3-core/src/main/java/com/jme3/input/InputManager.java @@ -39,6 +39,7 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector2f; import com.jme3.util.IntMap; import com.jme3.util.IntMap.Entry; +import com.jme3.util.SafeArrayList; import java.util.ArrayList; import java.util.HashMap; import java.util.logging.Level; @@ -97,15 +98,14 @@ public class InputManager implements RawInputListener { private boolean mouseVisible = true; private boolean safeMode = false; private float globalAxisDeadZone = 0.05f; - private Vector2f cursorPos = new Vector2f(); + private final Vector2f cursorPos = new Vector2f(); private Joystick[] joysticks; private final IntMap> bindings = new IntMap>(); private final HashMap mappings = new HashMap(); private final IntMap pressedButtons = new IntMap(); private final IntMap axisValues = new IntMap(); - private ArrayList rawListeners = new ArrayList(); - private RawInputListener[] rawListenerArray = null; - private ArrayList inputQueue = new ArrayList(); + private final SafeArrayList rawListeners = new SafeArrayList(RawInputListener.class); + private final ArrayList inputQueue = new ArrayList(); private static class Mapping { @@ -722,7 +722,6 @@ public class InputManager implements RawInputListener { */ public void addRawInputListener(RawInputListener listener) { rawListeners.add(listener); - rawListenerArray = null; } /** @@ -735,7 +734,6 @@ public class InputManager implements RawInputListener { */ public void removeRawInputListener(RawInputListener listener) { rawListeners.remove(listener); - rawListenerArray = null; } /** @@ -745,13 +743,6 @@ public class InputManager implements RawInputListener { */ public void clearRawInputListeners() { rawListeners.clear(); - rawListenerArray = null; - } - - private RawInputListener[] getRawListenerArray() { - if (rawListenerArray == null) - rawListenerArray = rawListeners.toArray(new RawInputListener[rawListeners.size()]); - return rawListenerArray; } /** @@ -814,7 +805,7 @@ public class InputManager implements RawInputListener { private void processQueue() { int queueSize = inputQueue.size(); - RawInputListener[] array = getRawListenerArray(); + RawInputListener[] array = rawListeners.getArray(); for (RawInputListener listener : array) { listener.beginInput(); From b006204c0f93e8915ab1669af3ea440bd2685322 Mon Sep 17 00:00:00 2001 From: Paul Speed Date: Sat, 5 Dec 2015 22:14:36 -0500 Subject: [PATCH 13/13] Various warning-related cleanups. Added @Overrides and removed some manual unboxing. --- .../main/java/com/jme3/input/InputManager.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/input/InputManager.java b/jme3-core/src/main/java/com/jme3/input/InputManager.java index c430e267c..b21d225bb 100644 --- a/jme3-core/src/main/java/com/jme3/input/InputManager.java +++ b/jme3-core/src/main/java/com/jme3/input/InputManager.java @@ -287,12 +287,14 @@ public class InputManager implements RawInputListener { /** * Callback from RawInputListener. Do not use. */ + @Override public void beginInput() { } /** * Callback from RawInputListener. Do not use. */ + @Override public void endInput() { } @@ -312,10 +314,10 @@ public class InputManager implements RawInputListener { Float val1 = axisValues.get(hash1); Float val2 = axisValues.get(hash2); - if (val1 != null && val1.floatValue() > effectiveDeadZone) { + if (val1 != null && val1 > effectiveDeadZone) { invokeActions(hash1, false); } - if (val2 != null && val2.floatValue() > effectiveDeadZone) { + if (val2 != null && val2 > effectiveDeadZone) { invokeActions(hash2, false); } @@ -329,7 +331,7 @@ public class InputManager implements RawInputListener { // Clear the reverse direction's actions in case we // crossed center too quickly Float otherVal = axisValues.get(otherHash); - if (otherVal != null && otherVal.floatValue() > effectiveDeadZone) { + if (otherVal != null && otherVal > effectiveDeadZone) { invokeActions(otherHash, false); } @@ -343,7 +345,7 @@ public class InputManager implements RawInputListener { // Clear the reverse direction's actions in case we // crossed center too quickly Float otherVal = axisValues.get(otherHash); - if (otherVal != null && otherVal.floatValue() > effectiveDeadZone) { + if (otherVal != null && otherVal > effectiveDeadZone) { invokeActions(otherHash, false); } @@ -356,6 +358,7 @@ public class InputManager implements RawInputListener { /** * Callback from RawInputListener. Do not use. */ + @Override public void onJoyAxisEvent(JoyAxisEvent evt) { if (!eventsPermitted) { throw new UnsupportedOperationException("JoyInput has raised an event at an illegal time."); @@ -377,6 +380,7 @@ public class InputManager implements RawInputListener { /** * Callback from RawInputListener. Do not use. */ + @Override public void onJoyButtonEvent(JoyButtonEvent evt) { if (!eventsPermitted) { throw new UnsupportedOperationException("JoyInput has raised an event at an illegal time."); @@ -420,6 +424,7 @@ public class InputManager implements RawInputListener { /** * Callback from RawInputListener. Do not use. */ + @Override public void onMouseMotionEvent(MouseMotionEvent evt) { if (!eventsPermitted) { throw new UnsupportedOperationException("MouseInput has raised an event at an illegal time."); @@ -438,6 +443,7 @@ public class InputManager implements RawInputListener { /** * Callback from RawInputListener. Do not use. */ + @Override public void onMouseButtonEvent(MouseButtonEvent evt) { if (!eventsPermitted) { throw new UnsupportedOperationException("MouseInput has raised an event at an illegal time."); @@ -460,6 +466,7 @@ public class InputManager implements RawInputListener { /** * Callback from RawInputListener. Do not use. */ + @Override public void onKeyEvent(KeyInputEvent evt) { if (!eventsPermitted) { throw new UnsupportedOperationException("KeyInput has raised an event at an illegal time.");