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.
This commit is contained in:
parent
15fd0f6d81
commit
007fe5999e
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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<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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue