mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-23 21:32:53 +02:00
#15 android keyboard support; sensor landscape screen orientation
This commit is contained in:
@@ -19,7 +19,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:screenOrientation="landscape">
|
android:screenOrientation="sensorLandscape">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
@@ -106,14 +106,32 @@ int getPOV(int x, int y) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InputKey keyToInputKey(int code) {
|
||||||
|
int codes[] = {
|
||||||
|
21, 22, 19, 20, 62, 66, 111, 59, 113, 57,
|
||||||
|
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
||||||
|
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
|
||||||
|
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < sizeof(codes) / sizeof(codes[0]); i++)
|
||||||
|
if (codes[i] == code)
|
||||||
|
return (InputKey)(ikLeft + i);
|
||||||
|
return ikNone;
|
||||||
|
}
|
||||||
|
|
||||||
JNI_METHOD(void, nativeTouch)(JNIEnv* env, jobject obj, jint id, jint state, jfloat x, jfloat y) {
|
JNI_METHOD(void, nativeTouch)(JNIEnv* env, jobject obj, jint id, jint state, jfloat x, jfloat y) {
|
||||||
// gamepad
|
// gamepad / keyboard
|
||||||
if (state < 0) {
|
if (state < 0) {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case -3 : Input::setPos(ikJoyL, vec2(DeadZone(x), DeadZone(y))); break;
|
case -3 : Input::setPos(ikJoyL, vec2(DeadZone(x), DeadZone(y))); break;
|
||||||
case -4 : Input::setPos(ikJoyR, vec2(DeadZone(x), DeadZone(y))); break;
|
case -4 : Input::setPos(ikJoyR, vec2(DeadZone(x), DeadZone(y))); break;
|
||||||
case -5 : Input::setPos(ikJoyPOV, vec2(float(getPOV(sign(x), sign(y))), 0.0f)); break;
|
case -5 : Input::setPos(ikJoyPOV, vec2(float(getPOV(sign(x), sign(y))), 0.0f)); break;
|
||||||
default : Input::setDown(InputKey(ikJoyA + (int)x), state != -1);
|
default : {
|
||||||
|
int btn = int(x);
|
||||||
|
InputKey key = btn <= 0 ? InputKey(ikJoyA - btn) : keyToInputKey(btn);
|
||||||
|
Input::setDown(key, state != -1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,6 @@ public class MainActivity extends Activity implements OnTouchListener, OnGeneric
|
|||||||
private GLSurfaceView view;
|
private GLSurfaceView view;
|
||||||
//private GvrLayout gvrLayout;
|
//private GvrLayout gvrLayout;
|
||||||
private Wrapper wrapper;
|
private Wrapper wrapper;
|
||||||
private SparseIntArray joys = new SparseIntArray();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -121,69 +120,55 @@ public class MainActivity extends Activity implements OnTouchListener, OnGeneric
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getJoyIndex(InputDevice dev) {
|
|
||||||
int src = dev.getSources();
|
|
||||||
if ((src & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD ||
|
|
||||||
(src & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK) {
|
|
||||||
|
|
||||||
int id = dev.getId();
|
|
||||||
int index = joys.get(id, -1);
|
|
||||||
|
|
||||||
if (index == -1) {
|
|
||||||
index = joys.size();
|
|
||||||
joys.append(id, index);
|
|
||||||
}
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onGenericMotion(View v, MotionEvent event) {
|
public boolean onGenericMotion(View v, MotionEvent event) {
|
||||||
int index = getJoyIndex(event.getDevice());
|
int src = event.getDevice().getSources();
|
||||||
if (index == -1) return false;
|
|
||||||
|
|
||||||
wrapper.onTouch(index, -3, event.getAxisValue(MotionEvent.AXIS_X),
|
boolean isMouse = (src & (InputDevice.SOURCE_MOUSE)) != 0;
|
||||||
event.getAxisValue(MotionEvent.AXIS_Y));
|
boolean isJoy = (src & (InputDevice.SOURCE_GAMEPAD | InputDevice.SOURCE_JOYSTICK)) != 0;
|
||||||
|
|
||||||
wrapper.onTouch(index, -4, event.getAxisValue(MotionEvent.AXIS_Z),
|
if (isMouse) {
|
||||||
event.getAxisValue(MotionEvent.AXIS_RZ));
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
wrapper.onTouch(index, -5, event.getAxisValue(MotionEvent.AXIS_HAT_X),
|
if (isJoy) {
|
||||||
event.getAxisValue(MotionEvent.AXIS_HAT_Y));
|
wrapper.onTouch(0, -3, event.getAxisValue(MotionEvent.AXIS_X),
|
||||||
|
event.getAxisValue(MotionEvent.AXIS_Y));
|
||||||
|
|
||||||
|
wrapper.onTouch(0, -4, event.getAxisValue(MotionEvent.AXIS_Z),
|
||||||
|
event.getAxisValue(MotionEvent.AXIS_RZ));
|
||||||
|
|
||||||
|
wrapper.onTouch(0, -5, event.getAxisValue(MotionEvent.AXIS_HAT_X),
|
||||||
|
event.getAxisValue(MotionEvent.AXIS_HAT_Y));
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onKey(View v, int keyCode, KeyEvent event) {
|
public boolean onKey(View v, int keyCode, KeyEvent event) {
|
||||||
int index = getJoyIndex(event.getDevice());
|
|
||||||
if (index == -1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
int btn;
|
int btn;
|
||||||
|
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case KeyEvent.KEYCODE_BUTTON_A : btn = 0; break;
|
case KeyEvent.KEYCODE_BUTTON_A : btn = -0; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_B : btn = 1; break;
|
case KeyEvent.KEYCODE_BUTTON_B : btn = -1; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_X : btn = 2; break;
|
case KeyEvent.KEYCODE_BUTTON_X : btn = -2; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_Y : btn = 3; break;
|
case KeyEvent.KEYCODE_BUTTON_Y : btn = -3; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_L1 : btn = 4; break;
|
case KeyEvent.KEYCODE_BUTTON_L1 : btn = -4; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_R1 : btn = 5; break;
|
case KeyEvent.KEYCODE_BUTTON_R1 : btn = -5; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_SELECT : btn = 6; break;
|
case KeyEvent.KEYCODE_BUTTON_SELECT : btn = -6; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_START : btn = 7; break;
|
case KeyEvent.KEYCODE_BUTTON_START : btn = -7; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_THUMBL : btn = 8; break;
|
case KeyEvent.KEYCODE_BUTTON_THUMBL : btn = -8; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_THUMBR : btn = 9; break;
|
case KeyEvent.KEYCODE_BUTTON_THUMBR : btn = -9; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_L2 : btn = 10; break;
|
case KeyEvent.KEYCODE_BUTTON_L2 : btn = -10; break;
|
||||||
case KeyEvent.KEYCODE_BUTTON_R2 : btn = 11; break;
|
case KeyEvent.KEYCODE_BUTTON_R2 : btn = -11; break;
|
||||||
default : btn = -1;
|
case KeyEvent.KEYCODE_BACK : btn = KeyEvent.KEYCODE_ESCAPE;
|
||||||
|
default : btn = keyCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (btn != -1) {
|
boolean isDown = event.getAction() == KeyEvent.ACTION_DOWN;
|
||||||
wrapper.onTouch(index, event.getAction() == KeyEvent.ACTION_DOWN ? -2 : -1, btn, 0);
|
wrapper.onTouch(0, isDown ? -2 : -1, btn, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
Reference in New Issue
Block a user