From 007fe5999e636d1ec799190d2ac903a1da4086ea Mon Sep 17 00:00:00 2001 From: Kevin Glass Date: Fri, 17 Nov 2006 08:08:21 +0000 Subject: [PATCH] Updated Controllers event queue to make use of the new JInput event queue, including adding getEventNanoseconds() to the Controllers interface. TestControllers against Logitech pad on Win32 confirms that no behaviour changes are evident. --- src/java/org/lwjgl/input/ControllerEvent.java | 16 +++- src/java/org/lwjgl/input/Controllers.java | 9 ++ .../org/lwjgl/input/JInputController.java | 90 +++++++++---------- .../org/lwjgl/test/input/TestControllers.java | 1 + 4 files changed, 67 insertions(+), 49 deletions(-) diff --git a/src/java/org/lwjgl/input/ControllerEvent.java b/src/java/org/lwjgl/input/ControllerEvent.java index c0f2f9c2..926940da 100644 --- a/src/java/org/lwjgl/input/ControllerEvent.java +++ b/src/java/org/lwjgl/input/ControllerEvent.java @@ -25,24 +25,38 @@ class ControllerEvent { private boolean xaxis; /** True if this event was caused by the y axis */ private boolean yaxis; + /** The time stamp of this event */ + private long timeStamp; /** * Create a new event * * @param source The source of the event + * @param timeStamp The time stamp given for this event * @param type The type of control generating this event * @param index The index of the input that generated the event * @param xaxis True if this event was caused by the x-axis * @param yaxis True if this event was caused by the y-axis */ - public ControllerEvent(Controller source,int type,int index,boolean xaxis,boolean yaxis) { + public ControllerEvent(Controller source,long timeStamp, int type,int index,boolean xaxis,boolean yaxis) { this.source = source; + this.timeStamp = timeStamp; this.type = type; this.index = index; this.xaxis = xaxis; this.yaxis = yaxis; } + /** + * Get the time stamp given for this event. As with nanoTime() + * this value means nothing other than giving ordering + * + * @return The time stamp given for this event + */ + public long getTimeStamp() { + return timeStamp; + } + /** * Get the controller that generated this event * diff --git a/src/java/org/lwjgl/input/Controllers.java b/src/java/org/lwjgl/input/Controllers.java index d213327e..ccaa5d11 100644 --- a/src/java/org/lwjgl/input/Controllers.java +++ b/src/java/org/lwjgl/input/Controllers.java @@ -234,6 +234,15 @@ public class Controllers { return event.isPovY(); } + /** + * Get the timestamp assigned to the current event + * + * @return The timestamp assigned ot the current event + */ + public static long getEventNanoseconds() { + return event.getTimeStamp(); + } + /** * Add an event to the stack of events that have been caused * diff --git a/src/java/org/lwjgl/input/JInputController.java b/src/java/org/lwjgl/input/JInputController.java index 48d51cd2..328321f1 100644 --- a/src/java/org/lwjgl/input/JInputController.java +++ b/src/java/org/lwjgl/input/JInputController.java @@ -3,6 +3,8 @@ package org.lwjgl.input; import java.util.ArrayList; import net.java.games.input.Component; +import net.java.games.input.Event; +import net.java.games.input.EventQueue; /** * A wrapper round a JInput controller that attempts to make the interface @@ -159,68 +161,60 @@ class JInputController implements Controller { public void poll() { target.poll(); - // read buttons to update events - for (int i=0;i axesMax[i]) { - axesMax[i] = Math.abs(value); - } - - // normalize the value based on maximum value read in the past - value /= axesMax[i]; - - if (axesValue[i] != value) { + // handle axis updates + if (axes.contains(event.getComponent())) { + Component axis = event.getComponent(); + int axisIndex = axes.indexOf(axis); + float value = axis.getPollData(); + + // fixed dead zone since most axis don't report it :( + if (Math.abs(value) < deadZones[axisIndex]) { + value = 0; + } + if (Math.abs(value) < axis.getDeadZone()) { + value = 0; + } + if (Math.abs(value) > axesMax[axisIndex]) { + axesMax[axisIndex] = Math.abs(value); + } + + // normalize the value based on maximum value read in the past + value /= axesMax[axisIndex]; // fire event - Controllers.addEvent(new ControllerEvent(this,ControllerEvent.AXIS,i,i == xaxis,i == yaxis)); + Controllers.addEvent(new ControllerEvent(this,event.getNanos(),ControllerEvent.AXIS,axisIndex, + axisIndex == xaxis,axisIndex == yaxis)); + axesValue[axisIndex] = value; } - axesValue[i] = value; } } diff --git a/src/java/org/lwjgl/test/input/TestControllers.java b/src/java/org/lwjgl/test/input/TestControllers.java index 212cde2e..50023de5 100644 --- a/src/java/org/lwjgl/test/input/TestControllers.java +++ b/src/java/org/lwjgl/test/input/TestControllers.java @@ -142,6 +142,7 @@ public class TestControllers extends JPanel { while (Controllers.next()) { System.out.println("Event Fired: "); + System.out.println("\t"+Controllers.getEventNanoseconds()); System.out.println("\t"+Controllers.getEventSource()+":"+Controllers.getEventControlIndex()+":"+Controllers.isEventButton()); System.out.println("\t"+Controllers.isEventXAxis()+":"+Controllers.isEventYAxis()); }