diff options
author | Juan Linietsky <reduzio@gmail.com> | 2015-04-07 20:11:35 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2015-04-07 20:11:35 -0300 |
commit | b60d41bb5d185336556bc9b79e1ff71086988828 (patch) | |
tree | bb170450b9ec60387df252e0f944e126afb923bd | |
parent | 888dfcb02edee633a3ab55184b315167383723cf (diff) | |
parent | 7a2698bb44021b7b51a85f2dee3c722f33924ead (diff) |
Merge pull request #1627 from Martho42/patch-1
Fixes issue #1604 (accelerometer malfunctioning on some devices)
-rw-r--r-- | platform/android/java/src/com/android/godot/Godot.java | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/platform/android/java/src/com/android/godot/Godot.java b/platform/android/java/src/com/android/godot/Godot.java index 1fd37c98cd..2abb4cec53 100644 --- a/platform/android/java/src/com/android/godot/Godot.java +++ b/platform/android/java/src/com/android/godot/Godot.java @@ -571,9 +571,24 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC } @Override public void onSensorChanged(SensorEvent event) { - float x = event.values[0]; - float y = event.values[1]; - float z = event.values[2]; + Display display = ((WindowManager) 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 + + 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]; + + float x = adjustedValues[0]; + float y = adjustedValues[1]; + float z = adjustedValues[2]; GodotLib.accelerometer(x,y,z); } |