Fixed accelerometer joystick, added on-screen keyboard DPAD acting as a joystick
This commit is contained in:
@@ -22,21 +22,17 @@ class AccelerometerReader implements SensorEventListener {
|
||||
private SensorManager _manager = null;
|
||||
|
||||
public AccelerometerReader(Activity context) {
|
||||
_manager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
|
||||
if( _manager != null )
|
||||
System.out.println("libSDL: accelerometer start required: " + String.valueOf(Globals.UseAccelerometerAsArrowKeys));
|
||||
if( Globals.UseAccelerometerAsArrowKeys )
|
||||
{
|
||||
if( Globals.UseAccelerometerAsArrowKeys )
|
||||
_manager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
|
||||
if( _manager != null )
|
||||
{
|
||||
System.out.println("libSDL: starting accelerometer");
|
||||
// TODO: orientation allows for 3rd axis - azimuth, but it will be way too hard to the user
|
||||
// if( ! _manager.registerListener(this, _manager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME) )
|
||||
_manager.registerListener(this, _manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( Globals.AppUsesJoystick )
|
||||
{
|
||||
if( ! _manager.registerListener(this, _manager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME) )
|
||||
_manager.registerListener(this, _manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,9 +51,9 @@ class AccelerometerReader implements SensorEventListener {
|
||||
// TODO: it feels better for me to use tilt as X value instead of intuitive horizontal phone orientation
|
||||
// because then I can hold device comfortably, we need another user-configurable option for that
|
||||
// nativeOrientation(event.values[1], -event.values[2], event.values[0]); // Comfortable setting
|
||||
nativeAccelerometer(event.values[1], -event.values[0], event.values[2]); // Intuitive setting
|
||||
nativeAccelerometer(-event.values[1], -event.values[0], event.values[2]); // Intuitive setting
|
||||
else
|
||||
nativeAccelerometer(event.values[0], event.values[1], event.values[2]);
|
||||
nativeAccelerometer(event.values[0], event.values[1], event.values[2]); // TODO: not tested!
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -47,6 +47,7 @@ class Globals {
|
||||
public static int TouchscreenKeyboardSize = 0;
|
||||
public static int TouchscreenKeyboardTheme = 0;
|
||||
public static int AccelerometerSensitivity = 0;
|
||||
public static int AccelerometerCenterPos = 0;
|
||||
public static int TrackballDampening = 0;
|
||||
public static int AudioBufferConfig = 0;
|
||||
public static boolean OptionalDataDownload[] = null;
|
||||
|
||||
@@ -297,7 +297,7 @@ class Settings
|
||||
|
||||
static void showAdditionalInputConfig(final MainActivity p)
|
||||
{
|
||||
if( ! Globals.AppNeedsArrowKeys )
|
||||
if( ! Globals.AppNeedsArrowKeys && ! Globals.AppUsesJoystick )
|
||||
{
|
||||
showAccelerometerConfig(p);
|
||||
return;
|
||||
@@ -341,7 +341,7 @@ class Settings
|
||||
Globals.AccelerometerSensitivity = 0;
|
||||
if( ! Globals.UseAccelerometerAsArrowKeys )
|
||||
{
|
||||
showScreenKeyboardConfig(p);
|
||||
showAccelerometerCenterConfig(p);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -357,6 +357,36 @@ class Settings
|
||||
{
|
||||
Globals.AccelerometerSensitivity = item;
|
||||
|
||||
dialog.dismiss();
|
||||
showAccelerometerCenterConfig(p);
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.setOwnerActivity(p);
|
||||
alert.show();
|
||||
}
|
||||
|
||||
static void showAccelerometerCenterConfig(final MainActivity p)
|
||||
{
|
||||
Globals.AccelerometerSensitivity = 0;
|
||||
if( ! Globals.UseAccelerometerAsArrowKeys )
|
||||
{
|
||||
showScreenKeyboardConfig(p);
|
||||
return;
|
||||
}
|
||||
|
||||
final CharSequence[] items = { p.getResources().getString(R.string.accel_floating),
|
||||
p.getResources().getString(R.string.accel_fixed_start),
|
||||
p.getResources().getString(R.string.accel_fixed_horiz) };
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(p);
|
||||
builder.setTitle(R.string.accel_question_center);
|
||||
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener()
|
||||
{
|
||||
public void onClick(DialogInterface dialog, int item)
|
||||
{
|
||||
Globals.AccelerometerCenterPos = item;
|
||||
|
||||
dialog.dismiss();
|
||||
showScreenKeyboardConfig(p);
|
||||
}
|
||||
@@ -366,6 +396,7 @@ class Settings
|
||||
alert.show();
|
||||
}
|
||||
|
||||
|
||||
static void showScreenKeyboardConfig(final MainActivity p)
|
||||
{
|
||||
Globals.TouchscreenKeyboardSize = 0;
|
||||
@@ -463,11 +494,11 @@ class Settings
|
||||
nativeSetTrackballUsed();
|
||||
if( Globals.AppUsesMouse )
|
||||
nativeSetMouseUsed();
|
||||
if( Globals.AppUsesJoystick && !Globals.UseAccelerometerAsArrowKeys )
|
||||
if( Globals.AppUsesJoystick )
|
||||
nativeSetJoystickUsed();
|
||||
if( Globals.AppUsesMultitouch )
|
||||
nativeSetMultitouchUsed();
|
||||
nativeSetAccelerometerSensitivity(Globals.AccelerometerSensitivity);
|
||||
nativeSetAccelerometerSettings(Globals.AccelerometerSensitivity, Globals.AccelerometerCenterPos);
|
||||
nativeSetTrackballDampening(Globals.TrackballDampening);
|
||||
if( Globals.UseTouchscreenKeyboard )
|
||||
{
|
||||
@@ -534,7 +565,7 @@ class Settings
|
||||
private static native void nativeIsSdcardUsed(int flag);
|
||||
private static native void nativeSetTrackballUsed();
|
||||
private static native void nativeSetTrackballDampening(int value);
|
||||
private static native void nativeSetAccelerometerSensitivity(int value);
|
||||
private static native void nativeSetAccelerometerSettings(int sensitivity, int centerPos);
|
||||
private static native void nativeSetMouseUsed();
|
||||
private static native void nativeSetJoystickUsed();
|
||||
private static native void nativeSetMultitouchUsed();
|
||||
|
||||
@@ -192,6 +192,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer {
|
||||
System.loadLibrary("application");
|
||||
System.loadLibrary("sdl_main");
|
||||
Settings.Apply(context);
|
||||
accelerometer = new AccelerometerReader(context);
|
||||
// Tweak video thread priority, if user selected big audio buffer
|
||||
if(Globals.AudioBufferConfig >= 2)
|
||||
Thread.currentThread().setPriority( (Thread.NORM_PRIORITY + Thread.MIN_PRIORITY) / 2 ); // Lower than normal
|
||||
@@ -225,6 +226,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer {
|
||||
public native void nativeGlContextRecreated();
|
||||
|
||||
private Activity context = null;
|
||||
private AccelerometerReader accelerometer = null;
|
||||
|
||||
private EGL10 mEgl = null;
|
||||
private EGLDisplay mEglDisplay = null;
|
||||
@@ -242,7 +244,6 @@ class DemoGLSurfaceView extends GLSurfaceView_SDL {
|
||||
mParent = context;
|
||||
touchInput = DifferentTouchInput.getInstance();
|
||||
setEGLConfigChooser(Globals.NeedDepthBuffer);
|
||||
accelerometer = new AccelerometerReader(context);
|
||||
mRenderer = new DemoRenderer(context);
|
||||
setRenderer(mRenderer);
|
||||
}
|
||||
@@ -292,7 +293,6 @@ class DemoGLSurfaceView extends GLSurfaceView_SDL {
|
||||
|
||||
DemoRenderer mRenderer;
|
||||
Activity mParent;
|
||||
AccelerometerReader accelerometer = null;
|
||||
DifferentTouchInput touchInput = null;
|
||||
|
||||
public static native void nativeMouse( int x, int y, int action, int pointerId, int pressure, int radius );
|
||||
|
||||
Reference in New Issue
Block a user