Gyroscope support
This commit is contained in:
@@ -41,32 +41,35 @@ class AccelerometerReader implements SensorEventListener
|
||||
{
|
||||
|
||||
private SensorManager _manager = null;
|
||||
public boolean openedBySDL = false;
|
||||
|
||||
public AccelerometerReader(Activity context)
|
||||
{
|
||||
_manager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
|
||||
start();
|
||||
}
|
||||
|
||||
public synchronized void stop()
|
||||
{
|
||||
if( _manager != null )
|
||||
{
|
||||
System.out.println("libSDL: stopping accelerometer/gyroscope");
|
||||
_manager.unregisterListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void start()
|
||||
{
|
||||
if( Globals.UseAccelerometerAsArrowKeys || Globals.AppUsesAccelerometer )
|
||||
if( (Globals.UseAccelerometerAsArrowKeys || Globals.AppUsesAccelerometer) && _manager != null )
|
||||
{
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
if( Globals.AppUsesGyroscope && _manager != null )
|
||||
{
|
||||
System.out.println("libSDL: starting gyroscope");
|
||||
_manager.registerListener(this, _manager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_GAME);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,19 +82,18 @@ class AccelerometerReader implements SensorEventListener
|
||||
else
|
||||
nativeAccelerometer(event.values[0], event.values[1], event.values[2]); // TODO: not tested!
|
||||
}
|
||||
else
|
||||
if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE)
|
||||
{
|
||||
if( Globals.HorizontalOrientation )
|
||||
nativeOrientation(event.values[1], -event.values[2], event.values[0]);
|
||||
else
|
||||
nativeOrientation(event.values[2], event.values[1], event.values[0]);
|
||||
//if( Globals.HorizontalOrientation )
|
||||
nativeGyroscope(event.values[0], event.values[1], event.values[2]);
|
||||
// TODO: vertical orientation
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public synchronized void onAccuracyChanged(Sensor s, int a) {
|
||||
}
|
||||
|
||||
private native void nativeAccelerometer(float accX, float accY, float accZ);
|
||||
private native void nativeOrientation(float accX, float accY, float accZ);
|
||||
private native void nativeGyroscope(float X, float Y, float Z);
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ class Globals
|
||||
public static boolean AppNeedsTextInput = true;
|
||||
public static boolean AppUsesJoystick = false;
|
||||
public static boolean AppUsesAccelerometer = false;
|
||||
public static boolean AppUsesGyroscope = false;
|
||||
public static boolean AppUsesMultitouch = false;
|
||||
public static boolean NonBlockingSwapBuffers = false;
|
||||
public static boolean ResetSdlConfigForThisVersion = false;
|
||||
|
||||
@@ -580,6 +580,15 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer
|
||||
return context.isScreenKeyboardShown() ? 1 : 0;
|
||||
}
|
||||
|
||||
public void startAccelerometerGyroscope(int started)
|
||||
{
|
||||
accelerometer.openedBySDL = (started != 0);
|
||||
if( accelerometer.openedBySDL && !mPaused )
|
||||
accelerometer.start();
|
||||
else
|
||||
accelerometer.stop();
|
||||
}
|
||||
|
||||
public void exitApp()
|
||||
{
|
||||
nativeDone();
|
||||
@@ -769,7 +778,7 @@ class DemoGLSurfaceView extends GLSurfaceView_SDL {
|
||||
System.out.println("libSDL: DemoGLSurfaceView.onResume(): mRenderer.mGlSurfaceCreated " + mRenderer.mGlSurfaceCreated + " mRenderer.mPaused " + mRenderer.mPaused);
|
||||
if( mRenderer.mGlSurfaceCreated && ! mRenderer.mPaused || Globals.NonBlockingSwapBuffers )
|
||||
mRenderer.nativeGlContextRecreated();
|
||||
if( mRenderer.accelerometer != null ) // For some reason it crashes here often - are we getting this event before initialization?
|
||||
if( mRenderer.accelerometer != null && mRenderer.accelerometer.openedBySDL ) // For some reason it crashes here often - are we getting this event before initialization?
|
||||
mRenderer.accelerometer.start();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user