1
0
Fork 0
forked from fte/fteqw

Try to fix gamepad axis on android (where joysticks were already working).

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5464 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2019-05-29 23:20:42 +00:00
parent 4ab6af4f75
commit 0b3b2c55ce

View file

@ -198,14 +198,18 @@ public class FTENativeActivity extends android.app.NativeActivity
private static int AXIS_RELATIVE_X;//MotionEvent 24 private static int AXIS_RELATIVE_X;//MotionEvent 24
private static int AXIS_RELATIVE_Y;//MotionEvent 24 private static int AXIS_RELATIVE_Y;//MotionEvent 24
private static java.lang.reflect.Method MotionEvent_getAxisValueP; //MotionEvent 12 private static java.lang.reflect.Method MotionEvent_getAxisValueP; //MotionEvent 12
private static int SOURCE_MOUSE; //InputDevice private static int SOURCE_MOUSE = 0x00002002; //InputDevice 9
//private static int SOURCE_STYLUS = 0x00004002; //InputDevice 14
//private static int SOURCE_STYLUS = 0x00004002; //InputDevice 14
private static int SOURCE_MOUSE_RELATIVE = 0x00020004; //InputDevice 26
private static boolean canbuttons; private static boolean canbuttons;
private static java.lang.reflect.Method MotionEvent_getButtonState; //MotionEvent 14 private static java.lang.reflect.Method MotionEvent_getButtonState; //MotionEvent 14
private static boolean canjoystick; private static boolean canjoystick;
private static java.lang.reflect.Method MotionEvent_getAxisValueJ; private static java.lang.reflect.Method MotionEvent_getAxisValueJ;
private static java.lang.reflect.Method InputDevice_getMotionRange; private static java.lang.reflect.Method InputDevice_getMotionRange;
private static int SOURCE_JOYSTICK; //InputDevice private static int SOURCE_JOYSTICK = 0x01000010; //InputDevice 12
private static int SOURCE_GAMEPAD = 0x00000401; //InputDevice 12
private static int AXIS_X; private static int AXIS_X;
private static int AXIS_Y; private static int AXIS_Y;
private static int AXIS_LTRIGGER; private static int AXIS_LTRIGGER;
@ -222,7 +226,8 @@ public class FTENativeActivity extends android.app.NativeActivity
java.lang.reflect.Field relY = MotionEvent.class.getField("AXIS_RELATIVE_Y"); //api24ish java.lang.reflect.Field relY = MotionEvent.class.getField("AXIS_RELATIVE_Y"); //api24ish
AXIS_RELATIVE_X = (Integer)relX.get(null); AXIS_RELATIVE_X = (Integer)relX.get(null);
AXIS_RELATIVE_Y = (Integer)relY.get(null); AXIS_RELATIVE_Y = (Integer)relY.get(null);
SOURCE_MOUSE = (Integer)InputDevice.class.getField("SOURCE_MOUSE").get(null); // SOURCE_MOUSE = (Integer)InputDevice.class.getField("SOURCE_MOUSE").get(null);
// SOURCE_MOUSE_RELATIVE = (Integer)InputDevice.class.getField("SOURCE_MOUSE_RELATIVE").get(null);
canrelative = true; //yay, no exceptions. canrelative = true; //yay, no exceptions.
android.util.Log.i("FTEDroid", "relative mouse supported"); android.util.Log.i("FTEDroid", "relative mouse supported");
@ -243,7 +248,8 @@ public class FTENativeActivity extends android.app.NativeActivity
AXIS_Z = (Integer)MotionEvent.class.getField("AXIS_Z").get(null); AXIS_Z = (Integer)MotionEvent.class.getField("AXIS_Z").get(null);
AXIS_RZ = (Integer)MotionEvent.class.getField("AXIS_RZ").get(null); AXIS_RZ = (Integer)MotionEvent.class.getField("AXIS_RZ").get(null);
AXIS_RTRIGGER = (Integer)MotionEvent.class.getField("AXIS_RTRIGGER").get(null); AXIS_RTRIGGER = (Integer)MotionEvent.class.getField("AXIS_RTRIGGER").get(null);
SOURCE_JOYSTICK = (Integer)InputDevice.class.getField("SOURCE_JOYSTICK").get(null); // SOURCE_JOYSTICK = (Integer)InputDevice.class.getField("SOURCE_JOYSTICK").get(null);
// SOURCE_GAMEPAD = (Integer)InputDevice.class.getField("SOURCE_GAMEPAD").get(null);
canjoystick = true; canjoystick = true;
android.util.Log.i("FTEDroid", "gamepad supported"); android.util.Log.i("FTEDroid", "gamepad supported");
} catch(Exception e) { } catch(Exception e) {
@ -274,9 +280,10 @@ public class FTENativeActivity extends android.app.NativeActivity
int id; int id;
float x, y, size; float x, y, size;
final int act = event.getAction(); final int act = event.getAction();
final int src = event.getSource();
//handle gamepad axis //handle gamepad axis
if ((event.getSource() & SOURCE_JOYSTICK)!=0 && event.getAction() == MotionEvent.ACTION_MOVE) if ((event.getSource() & (SOURCE_GAMEPAD|SOURCE_JOYSTICK))!=0 && event.getAction() == MotionEvent.ACTION_MOVE)
{ {
InputDevice dev = event.getDevice(); InputDevice dev = event.getDevice();
handleJoystickAxis(event, dev, AXIS_X, 0); handleJoystickAxis(event, dev, AXIS_X, 0);
@ -294,7 +301,7 @@ public class FTENativeActivity extends android.app.NativeActivity
int i; int i;
for (i = 0; i < pointerCount; i++) for (i = 0; i < pointerCount; i++)
{ {
if (canrelative && event.getSource() == SOURCE_MOUSE && wantrelative()) if (canrelative && src == SOURCE_MOUSE && wantrelative())
{ {
try try
{ {
@ -323,7 +330,7 @@ public class FTENativeActivity extends android.app.NativeActivity
y = event.getY(id); y = event.getY(id);
size = event.getSize(id); size = event.getSize(id);
id = event.getPointerId(id); id = event.getPointerId(id);
if (canbuttons && event.getSource() == SOURCE_MOUSE) if (canbuttons && src == SOURCE_MOUSE)
{ {
try {mousepress(id, (Integer)MotionEvent_getButtonState.invoke(event));} try {mousepress(id, (Integer)MotionEvent_getButtonState.invoke(event));}
catch(Exception e){} catch(Exception e){}