|
@@ -727,45 +727,78 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
|
- public void onSensorChanged(SensorEvent event) {
|
|
|
|
|
|
+ public float[] getRotatedValues(float values[]) {
|
|
|
|
+ if (values == null || values.length != 3) {
|
|
|
|
+ return values;
|
|
|
|
+ }
|
|
|
|
+
|
|
Display display =
|
|
Display display =
|
|
((WindowManager)getActivity().getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
|
|
((WindowManager)getActivity().getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
|
|
int displayRotation = display.getRotation();
|
|
int displayRotation = display.getRotation();
|
|
|
|
|
|
- float[] adjustedValues = new float[3];
|
|
|
|
- final int[][] axisSwap = {
|
|
|
|
- { 1, -1, 0, 1 }, // ROTATION_0
|
|
|
|
- { -1, -1, 1, 0 }, // ROTATION_90
|
|
|
|
- { -1, 1, 0, 1 }, // ROTATION_180
|
|
|
|
- { 1, 1, 1, 0 }
|
|
|
|
- }; // ROTATION_270
|
|
|
|
|
|
+ float[] rotatedValues = new float[3];
|
|
|
|
+ switch (displayRotation) {
|
|
|
|
+ case Surface.ROTATION_0:
|
|
|
|
+ rotatedValues[0] = values[0];
|
|
|
|
+ rotatedValues[1] = values[1];
|
|
|
|
+ rotatedValues[2] = values[2];
|
|
|
|
+ break;
|
|
|
|
+ case Surface.ROTATION_90:
|
|
|
|
+ rotatedValues[0] = -values[1];
|
|
|
|
+ rotatedValues[1] = values[0];
|
|
|
|
+ rotatedValues[2] = values[2];
|
|
|
|
+ break;
|
|
|
|
+ case Surface.ROTATION_180:
|
|
|
|
+ rotatedValues[0] = -values[0];
|
|
|
|
+ rotatedValues[1] = -values[1];
|
|
|
|
+ rotatedValues[2] = values[2];
|
|
|
|
+ break;
|
|
|
|
+ case Surface.ROTATION_270:
|
|
|
|
+ rotatedValues[0] = values[1];
|
|
|
|
+ rotatedValues[1] = -values[0];
|
|
|
|
+ rotatedValues[2] = values[2];
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- final int[] as = axisSwap[displayRotation];
|
|
|
|
- adjustedValues[0] = (float)as[0] * event.values[as[2]];
|
|
|
|
- adjustedValues[1] = (float)as[1] * event.values[as[3]];
|
|
|
|
- adjustedValues[2] = event.values[2];
|
|
|
|
|
|
+ return rotatedValues;
|
|
|
|
+ }
|
|
|
|
|
|
- final float x = adjustedValues[0];
|
|
|
|
- final float y = adjustedValues[1];
|
|
|
|
- final float z = adjustedValues[2];
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void onSensorChanged(SensorEvent event) {
|
|
|
|
+ if (mRenderView == null) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
final int typeOfSensor = event.sensor.getType();
|
|
final int typeOfSensor = event.sensor.getType();
|
|
- if (mRenderView != null) {
|
|
|
|
- mRenderView.queueOnRenderThread(() -> {
|
|
|
|
- if (typeOfSensor == Sensor.TYPE_ACCELEROMETER) {
|
|
|
|
- GodotLib.accelerometer(-x, y, -z);
|
|
|
|
- }
|
|
|
|
- if (typeOfSensor == Sensor.TYPE_GRAVITY) {
|
|
|
|
- GodotLib.gravity(-x, y, -z);
|
|
|
|
- }
|
|
|
|
- if (typeOfSensor == Sensor.TYPE_MAGNETIC_FIELD) {
|
|
|
|
- GodotLib.magnetometer(-x, y, -z);
|
|
|
|
- }
|
|
|
|
- if (typeOfSensor == Sensor.TYPE_GYROSCOPE) {
|
|
|
|
- GodotLib.gyroscope(x, -y, z);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
|
|
+ switch (typeOfSensor) {
|
|
|
|
+ case Sensor.TYPE_ACCELEROMETER: {
|
|
|
|
+ float[] rotatedValues = getRotatedValues(event.values);
|
|
|
|
+ mRenderView.queueOnRenderThread(() -> {
|
|
|
|
+ GodotLib.accelerometer(-rotatedValues[0], -rotatedValues[1], -rotatedValues[2]);
|
|
|
|
+ });
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case Sensor.TYPE_GRAVITY: {
|
|
|
|
+ float[] rotatedValues = getRotatedValues(event.values);
|
|
|
|
+ mRenderView.queueOnRenderThread(() -> {
|
|
|
|
+ GodotLib.gravity(-rotatedValues[0], -rotatedValues[1], -rotatedValues[2]);
|
|
|
|
+ });
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case Sensor.TYPE_MAGNETIC_FIELD: {
|
|
|
|
+ float[] rotatedValues = getRotatedValues(event.values);
|
|
|
|
+ mRenderView.queueOnRenderThread(() -> {
|
|
|
|
+ GodotLib.magnetometer(-rotatedValues[0], -rotatedValues[1], -rotatedValues[2]);
|
|
|
|
+ });
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case Sensor.TYPE_GYROSCOPE: {
|
|
|
|
+ float[] rotatedValues = getRotatedValues(event.values);
|
|
|
|
+ mRenderView.queueOnRenderThread(() -> {
|
|
|
|
+ GodotLib.gyroscope(rotatedValues[0], rotatedValues[1], rotatedValues[2]);
|
|
|
|
+ });
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|