From: <kev...@us...> - 2006-11-17 08:08:22
|
Revision: 2648 http://svn.sourceforge.net/java-game-lib/?rev=2648&view=rev Author: kevglass Date: 2006-11-17 00:08:21 -0800 (Fri, 17 Nov 2006) Log Message: ----------- 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. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/input/ControllerEvent.java trunk/LWJGL/src/java/org/lwjgl/input/Controllers.java trunk/LWJGL/src/java/org/lwjgl/input/JInputController.java trunk/LWJGL/src/java/org/lwjgl/test/input/TestControllers.java Modified: trunk/LWJGL/src/java/org/lwjgl/input/ControllerEvent.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/input/ControllerEvent.java 2006-11-17 07:17:12 UTC (rev 2647) +++ trunk/LWJGL/src/java/org/lwjgl/input/ControllerEvent.java 2006-11-17 08:08:21 UTC (rev 2648) @@ -25,18 +25,22 @@ 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; @@ -44,6 +48,16 @@ } /** + * 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 * * @return The controller that generated this event Modified: trunk/LWJGL/src/java/org/lwjgl/input/Controllers.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/input/Controllers.java 2006-11-17 07:17:12 UTC (rev 2647) +++ trunk/LWJGL/src/java/org/lwjgl/input/Controllers.java 2006-11-17 08:08:21 UTC (rev 2648) @@ -235,6 +235,15 @@ } /** + * 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 * * @param event The event to add to the list Modified: trunk/LWJGL/src/java/org/lwjgl/input/JInputController.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/input/JInputController.java 2006-11-17 07:17:12 UTC (rev 2647) +++ trunk/LWJGL/src/java/org/lwjgl/input/JInputController.java 2006-11-17 08:08:21 UTC (rev 2648) @@ -3,6 +3,8 @@ 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 @@ public void poll() { target.poll(); - // read buttons to update events - for (int i=0;i<getButtonCount();i++) { - Component button = (Component) buttons.get(i); - - float data = button.getPollData(); + Event event = new Event(); + EventQueue queue = target.getEventQueue(); + + while (queue.getNextEvent(event)) { + // handle button event + if (buttons.contains(event.getComponent())) { + Component button = event.getComponent(); + int buttonIndex = buttons.indexOf(button); + buttonState[buttonIndex] = event.getValue() != 0; - if (buttonState[i] != (data != 0)) { // fire button pressed event - Controllers.addEvent(new ControllerEvent(this,ControllerEvent.BUTTON,i,false,false)); + Controllers.addEvent(new ControllerEvent(this,event.getNanos(),ControllerEvent.BUTTON,buttonIndex,false,false)); } - buttonState[i] = data != 0; - } - - // read povs to update events - for (int i=0;i<pov.size();i++) { - Component p = (Component) pov.get(i); - - float data = p.getPollData(); - - if (povValues[i] != data) { + // handle pov events + if (pov.contains(event.getComponent())) { + Component povComponent = event.getComponent(); + int povIndex = pov.indexOf(povComponent); float prevX = getPovX(); float prevY = getPovY(); - - povValues[i] = data; - + povValues[povIndex] = event.getValue(); + if (prevX != getPovX()) { - Controllers.addEvent(new ControllerEvent(this,ControllerEvent.POVX,0,false,false)); + Controllers.addEvent(new ControllerEvent(this,event.getNanos(),ControllerEvent.POVX,0,false,false)); } if (prevY != getPovY()) { - Controllers.addEvent(new ControllerEvent(this,ControllerEvent.POVY,0,false,false)); + Controllers.addEvent(new ControllerEvent(this,event.getNanos(),ControllerEvent.POVY,0,false,false)); } } - povValues[i] = data; - } - - // read axis to update events - for (int i=0;i<getAxisCount();i++) { - Component axis = (Component) axes.get(i); - - float value = axis.getPollData(); - - // fixed dead zone since most axis don't report it :( - if (Math.abs(value) < deadZones[i]) { - value = 0; - } - if (Math.abs(value) < axis.getDeadZone()) { - value = 0; - } - if (Math.abs(value) > 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; } } Modified: trunk/LWJGL/src/java/org/lwjgl/test/input/TestControllers.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/input/TestControllers.java 2006-11-17 07:17:12 UTC (rev 2647) +++ trunk/LWJGL/src/java/org/lwjgl/test/input/TestControllers.java 2006-11-17 08:08:21 UTC (rev 2648) @@ -142,6 +142,7 @@ 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()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |