package com.badlogic.gdx.controllers.android;\r
\r
+import android.view.InputDevice;\r
+import android.view.InputDevice.MotionRange;\r
+\r
import com.badlogic.gdx.controllers.ControlType;\r
import com.badlogic.gdx.controllers.Controller;\r
import com.badlogic.gdx.controllers.ControllerListener;\r
private boolean attached;\r
private final String name;\r
protected final IntIntMap buttons = new IntIntMap();\r
- protected final IntFloatMap axes = new IntFloatMap();\r
+ protected final float[] axes;\r
+ protected final int[] axesIds;\r
private final Array<ControllerListener> listeners = new Array<ControllerListener>();\r
\r
public AndroidController(int deviceId, String name) {\r
this.deviceId = deviceId;\r
this.name = name;\r
+ \r
+ InputDevice device = InputDevice.getDevice(deviceId);\r
+ int numAxes = 0;\r
+ for (MotionRange range : device.getMotionRanges()) {\r
+ if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {\r
+ numAxes += 1;\r
+ }\r
+ }\r
+\r
+ axesIds = new int[numAxes];\r
+ axes = new float[numAxes];\r
+ int i = 0;\r
+ for (MotionRange range : device.getMotionRanges()) {\r
+ if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {\r
+ axesIds[i++] = range.getAxis();\r
+ }\r
+ }\r
}\r
\r
public boolean isAttached () {\r
\r
@Override\r
public float getAxis (int axisIndex) {\r
- return axes.get(axisIndex, 0);\r
+ return axes[axisIndex];\r
}\r
\r
@Override\r
public void run () {\r
synchronized(eventQueue) {\r
for(AndroidControllerEvent event: eventQueue) {\r
- Gdx.app.log(TAG, "received event");\r
switch(event.type) {\r
case AndroidControllerEvent.CONNECTED:\r
controllers.add(event.controller);\r
}\r
break;\r
case AndroidControllerEvent.AXIS:\r
- event.controller.axes.put(event.code, event.axisValue);\r
+ event.controller.axes[event.code] = event.axisValue;\r
for(ControllerListener listener: listeners) {\r
if(listener.axisMoved(event.controller, event.code, event.axisValue)) break;\r
}\r
if(controller != null) {\r
synchronized(eventQueue) {\r
final int historySize = motionEvent.getHistorySize();\r
- InputDevice device = InputDevice.getDevice(controller.getDeviceId());\r
- List<MotionRange> motionRanges = device.getMotionRanges();\r
- for (int axisIndex = 0; axisIndex < motionRanges.size(); axisIndex++) {\r
- float axisValue = motionEvent.getAxisValue(axisIndex);\r
+ int axisIndex = 0;\r
+ for (int axisId: controller.axesIds) {\r
+ float axisValue = motionEvent.getAxisValue(axisId);\r
if(controller.getAxis(axisIndex) == axisValue) {\r
+ Gdx.app.log(TAG, "skipped axis " + axisIndex + ", " + axisValue);\r
+ axisIndex++;\r
continue;\r
}\r
AndroidControllerEvent event = eventPool.obtain();\r
event.type = AndroidControllerEvent.AXIS;\r
event.controller = controller;\r
event.code = axisIndex;\r
- event.axisValue = motionEvent.getAxisValue(axisIndex);\r
+ event.axisValue = axisValue;\r
eventQueue.add(event);\r
+ axisIndex++;\r
}\r
}\r
return true;\r
public void addListener (ControllerListener listener);
public void removeListener (ControllerListener listener);
+
+ public static class Ouya {
+// public static final int BUTTON_O;
+// public static final int BUTTON_U;
+// public static final int BUTTON_Y;
+// public static final int BUTTON_A;
+ }
}
\ No newline at end of file