Skip to content

Commit

Permalink
Only rotate Android sensor values for sensors that need them rotated
Browse files Browse the repository at this point in the history
  • Loading branch information
madmiraal committed Dec 15, 2021
1 parent c2ac42c commit b5d325e
Showing 1 changed file with 64 additions and 31 deletions.
95 changes: 64 additions & 31 deletions platform/android/java/lib/src/org/godotengine/godot/Godot.java
Original file line number Diff line number Diff line change
Expand Up @@ -856,45 +856,78 @@ public void UiChangeListener() {
});
}

@Override
public void onSensorChanged(SensorEvent event) {
public float[] getRotatedValues(float values[]) {
if (values == null || values.length != 3) {
return values;
}

Display display =
((WindowManager)getActivity().getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
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 (mView == null) {
return;
}

final int typeOfSensor = event.sensor.getType();
if (mView != null) {
mView.queueEvent(() -> {
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);
mView.queueEvent(() -> {
GodotLib.accelerometer(-rotatedValues[0], -rotatedValues[1], -rotatedValues[2]);
});
break;
}
case Sensor.TYPE_GRAVITY: {
float[] rotatedValues = getRotatedValues(event.values);
mView.queueEvent(() -> {
GodotLib.gravity(-rotatedValues[0], -rotatedValues[1], -rotatedValues[2]);
});
break;
}
case Sensor.TYPE_MAGNETIC_FIELD: {
float[] rotatedValues = getRotatedValues(event.values);
mView.queueEvent(() -> {
GodotLib.magnetometer(-rotatedValues[0], -rotatedValues[1], -rotatedValues[2]);
});
break;
}
case Sensor.TYPE_GYROSCOPE: {
float[] rotatedValues = getRotatedValues(event.values);
mView.queueEvent(() -> {
GodotLib.gyroscope(rotatedValues[0], rotatedValues[1], rotatedValues[2]);
});
break;
}
}
}

Expand Down

0 comments on commit b5d325e

Please sign in to comment.