Fix ignored gamepad button when event is not have gamepad or joystick source.

This commit is contained in:
a1batross 2016-09-06 20:14:11 +03:00
parent 05ff89f1a3
commit 6f16759f6c

View file

@ -365,7 +365,9 @@ public class XashActivity extends Activity {
} }
// Engine will bind these to AUX${val} virtual keys // Engine will bind these to AUX${val} virtual keys
if( isGamePad || isJoystick ) // Android may send event without source flags set to GAMEPAD or CLASS_JOYSTICK
// so check for gamepad buttons anyway
if( isGamePad || isJoystick || XashActivity.handler.isGamepadButton( keyCode ) )
{ {
final int id = 0; final int id = 0;
byte val = 15; byte val = 15;
@ -377,42 +379,48 @@ public class XashActivity extends Activity {
case KeyEvent.KEYCODE_BUTTON_B: val = 1; break; case KeyEvent.KEYCODE_BUTTON_B: val = 1; break;
case KeyEvent.KEYCODE_BUTTON_X: val = 2; break; case KeyEvent.KEYCODE_BUTTON_X: val = 2; break;
case KeyEvent.KEYCODE_BUTTON_Y: val = 3; break; case KeyEvent.KEYCODE_BUTTON_Y: val = 3; break;
case KeyEvent.KEYCODE_BUTTON_L1: val = 4; break; case KeyEvent.KEYCODE_BUTTON_L1: val = 4; break;
case KeyEvent.KEYCODE_BUTTON_R1: val = 5; break; case KeyEvent.KEYCODE_BUTTON_R1: val = 5; break;
case KeyEvent.KEYCODE_BUTTON_SELECT: val = 6; break; case KeyEvent.KEYCODE_BUTTON_SELECT: val = 6; break;
case KeyEvent.KEYCODE_BUTTON_MODE: val = 7; break; case KeyEvent.KEYCODE_BUTTON_MODE: val = 7; break;
case KeyEvent.KEYCODE_BUTTON_START: val = 8; break; case KeyEvent.KEYCODE_BUTTON_START: val = 8; break;
case KeyEvent.KEYCODE_BUTTON_THUMBL: val = 9; break; case KeyEvent.KEYCODE_BUTTON_THUMBL: val = 9; break;
case KeyEvent.KEYCODE_BUTTON_THUMBR: val = 10; break; case KeyEvent.KEYCODE_BUTTON_THUMBR: val = 10; break;
// other // other
case KeyEvent.KEYCODE_BUTTON_L2: val = 13; break;
case KeyEvent.KEYCODE_BUTTON_R2: val = 14; break;
case KeyEvent.KEYCODE_BUTTON_C: val = 11; break; case KeyEvent.KEYCODE_BUTTON_C: val = 11; break;
case KeyEvent.KEYCODE_BUTTON_Z: val = 12; break; case KeyEvent.KEYCODE_BUTTON_Z: val = 12; break;
case KeyEvent.KEYCODE_BUTTON_L2: val = 13; break;
case KeyEvent.KEYCODE_BUTTON_R2: val = 14; break;
default: default:
if( keyCode >= KeyEvent.KEYCODE_BUTTON_1 && keyCode <= KeyEvent.KEYCODE_BUTTON_16 ) if( keyCode >= KeyEvent.KEYCODE_BUTTON_1 && keyCode <= KeyEvent.KEYCODE_BUTTON_16 )
{ {
val = (byte)(keyCode - KeyEvent.KEYCODE_BUTTON_1 + 15); val = (byte)((keyCode - KeyEvent.KEYCODE_BUTTON_1) + 15);
} }
else if( XashActivity.handler.isGamepadButton(keyCode) ) else if( XashActivity.handler.isGamepadButton(keyCode) )
{ {
// maybe never reached, as all possible gamepad buttons are checked before
Log.d(TAG, "Unhandled GamePad button: " + XashActivity.handler.keyCodeToString(keyCode) ); Log.d(TAG, "Unhandled GamePad button: " + XashActivity.handler.keyCodeToString(keyCode) );
return false; return false;
} }
else else
{ {
if( performEngineKeyEvent( action, keyCode, event ) ) // must be never reached too
return true; return performEngineKeyEvent( action, keyCode, event );
} }
} }
if( event.getAction() == KeyEvent.ACTION_DOWN ) if( event.getAction() == KeyEvent.ACTION_DOWN )
{
nativeJoyButton( id, val, true ); nativeJoyButton( id, val, true );
return true;
}
else if( event.getAction() == KeyEvent.ACTION_UP ) else if( event.getAction() == KeyEvent.ACTION_UP )
{
nativeJoyButton( id, val, false ); nativeJoyButton( id, val, false );
else return false; return true;
return true; }
return false;
} }
return performEngineKeyEvent( action, keyCode, event ); return performEngineKeyEvent( action, keyCode, event );