summaryrefslogtreecommitdiffstats
path: root/platform
diff options
context:
space:
mode:
authorbruvzg <7645683+bruvzg@users.noreply.github.com>2024-04-23 12:59:24 +0300
committerbruvzg <7645683+bruvzg@users.noreply.github.com>2024-04-23 12:59:24 +0300
commit7f52e5bd4462773a2dadc36be3788793cc0c0908 (patch)
treee8d11ba9e431e9ac508638b8a03c53e5c887882b /platform
parent7abe0c6014022874378cb64a11b26b0f0f178324 (diff)
downloadredot-engine-7f52e5bd4462773a2dadc36be3788793cc0c0908.tar.gz
[iOS] Fix sensors orientation.
Diffstat (limited to 'platform')
-rw-r--r--platform/ios/display_server_ios.h8
-rw-r--r--platform/ios/display_server_ios.mm22
-rw-r--r--platform/ios/godot_view.mm32
3 files changed, 28 insertions, 34 deletions
diff --git a/platform/ios/display_server_ios.h b/platform/ios/display_server_ios.h
index 3f9211c572..c6015a058c 100644
--- a/platform/ios/display_server_ios.h
+++ b/platform/ios/display_server_ios.h
@@ -129,10 +129,10 @@ public:
// MARK: Motion
- void update_gravity(float p_x, float p_y, float p_z);
- void update_accelerometer(float p_x, float p_y, float p_z);
- void update_magnetometer(float p_x, float p_y, float p_z);
- void update_gyroscope(float p_x, float p_y, float p_z);
+ void update_gravity(const Vector3 &p_gravity);
+ void update_accelerometer(const Vector3 &p_accelerometer);
+ void update_magnetometer(const Vector3 &p_magnetometer);
+ void update_gyroscope(const Vector3 &p_gyroscope);
// MARK: -
diff --git a/platform/ios/display_server_ios.mm b/platform/ios/display_server_ios.mm
index f84fb01ad0..cd6f855d77 100644
--- a/platform/ios/display_server_ios.mm
+++ b/platform/ios/display_server_ios.mm
@@ -289,26 +289,20 @@ void DisplayServerIOS::key(Key p_key, char32_t p_char, Key p_unshifted, Key p_ph
// MARK: Motion
-void DisplayServerIOS::update_gravity(float p_x, float p_y, float p_z) {
- Input::get_singleton()->set_gravity(Vector3(p_x, p_y, p_z));
+void DisplayServerIOS::update_gravity(const Vector3 &p_gravity) {
+ Input::get_singleton()->set_gravity(p_gravity);
}
-void DisplayServerIOS::update_accelerometer(float p_x, float p_y, float p_z) {
- // Found out the Z should not be negated! Pass as is!
- Vector3 v_accelerometer = Vector3(
- p_x / kDisplayServerIOSAcceleration,
- p_y / kDisplayServerIOSAcceleration,
- p_z / kDisplayServerIOSAcceleration);
-
- Input::get_singleton()->set_accelerometer(v_accelerometer);
+void DisplayServerIOS::update_accelerometer(const Vector3 &p_accelerometer) {
+ Input::get_singleton()->set_accelerometer(p_accelerometer / kDisplayServerIOSAcceleration);
}
-void DisplayServerIOS::update_magnetometer(float p_x, float p_y, float p_z) {
- Input::get_singleton()->set_magnetometer(Vector3(p_x, p_y, p_z));
+void DisplayServerIOS::update_magnetometer(const Vector3 &p_magnetometer) {
+ Input::get_singleton()->set_magnetometer(p_magnetometer);
}
-void DisplayServerIOS::update_gyroscope(float p_x, float p_y, float p_z) {
- Input::get_singleton()->set_gyroscope(Vector3(p_x, p_y, p_z));
+void DisplayServerIOS::update_gyroscope(const Vector3 &p_gyroscope) {
+ Input::get_singleton()->set_gyroscope(p_gyroscope);
}
// MARK: -
diff --git a/platform/ios/godot_view.mm b/platform/ios/godot_view.mm
index 4b87863fc5..1dddc9306e 100644
--- a/platform/ios/godot_view.mm
+++ b/platform/ios/godot_view.mm
@@ -451,28 +451,28 @@ static const float earth_gravity = 9.80665;
switch (interfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft: {
- DisplayServerIOS::get_singleton()->update_gravity(-gravity.y, gravity.x, gravity.z);
- DisplayServerIOS::get_singleton()->update_accelerometer(-(acceleration.y + gravity.y), (acceleration.x + gravity.x), acceleration.z + gravity.z);
- DisplayServerIOS::get_singleton()->update_magnetometer(-magnetic.y, magnetic.x, magnetic.z);
- DisplayServerIOS::get_singleton()->update_gyroscope(-rotation.y, rotation.x, rotation.z);
+ DisplayServerIOS::get_singleton()->update_gravity(Vector3(gravity.x, gravity.y, gravity.z).rotated(Vector3(0, 0, 1), -Math_PI * 0.5));
+ DisplayServerIOS::get_singleton()->update_accelerometer(Vector3(acceleration.x + gravity.x, acceleration.y + gravity.y, acceleration.z + gravity.z).rotated(Vector3(0, 0, 1), -Math_PI * 0.5));
+ DisplayServerIOS::get_singleton()->update_magnetometer(Vector3(magnetic.x, magnetic.y, magnetic.z).rotated(Vector3(0, 0, 1), -Math_PI * 0.5));
+ DisplayServerIOS::get_singleton()->update_gyroscope(Vector3(rotation.x, rotation.y, rotation.z).rotated(Vector3(0, 0, 1), -Math_PI * 0.5));
} break;
case UIInterfaceOrientationLandscapeRight: {
- DisplayServerIOS::get_singleton()->update_gravity(gravity.y, -gravity.x, gravity.z);
- DisplayServerIOS::get_singleton()->update_accelerometer((acceleration.y + gravity.y), -(acceleration.x + gravity.x), acceleration.z + gravity.z);
- DisplayServerIOS::get_singleton()->update_magnetometer(magnetic.y, -magnetic.x, magnetic.z);
- DisplayServerIOS::get_singleton()->update_gyroscope(rotation.y, -rotation.x, rotation.z);
+ DisplayServerIOS::get_singleton()->update_gravity(Vector3(gravity.x, gravity.y, gravity.z).rotated(Vector3(0, 0, 1), Math_PI * 0.5));
+ DisplayServerIOS::get_singleton()->update_accelerometer(Vector3(acceleration.x + gravity.x, acceleration.y + gravity.y, acceleration.z + gravity.z).rotated(Vector3(0, 0, 1), Math_PI * 0.5));
+ DisplayServerIOS::get_singleton()->update_magnetometer(Vector3(magnetic.x, magnetic.y, magnetic.z).rotated(Vector3(0, 0, 1), Math_PI * 0.5));
+ DisplayServerIOS::get_singleton()->update_gyroscope(Vector3(rotation.x, rotation.y, rotation.z).rotated(Vector3(0, 0, 1), Math_PI * 0.5));
} break;
case UIInterfaceOrientationPortraitUpsideDown: {
- DisplayServerIOS::get_singleton()->update_gravity(-gravity.x, gravity.y, gravity.z);
- DisplayServerIOS::get_singleton()->update_accelerometer(-(acceleration.x + gravity.x), (acceleration.y + gravity.y), acceleration.z + gravity.z);
- DisplayServerIOS::get_singleton()->update_magnetometer(-magnetic.x, magnetic.y, magnetic.z);
- DisplayServerIOS::get_singleton()->update_gyroscope(-rotation.x, rotation.y, rotation.z);
+ DisplayServerIOS::get_singleton()->update_gravity(Vector3(gravity.x, gravity.y, gravity.z).rotated(Vector3(0, 0, 1), Math_PI));
+ DisplayServerIOS::get_singleton()->update_accelerometer(Vector3(acceleration.x + gravity.x, acceleration.y + gravity.y, acceleration.z + gravity.z).rotated(Vector3(0, 0, 1), Math_PI));
+ DisplayServerIOS::get_singleton()->update_magnetometer(Vector3(magnetic.x, magnetic.y, magnetic.z).rotated(Vector3(0, 0, 1), Math_PI));
+ DisplayServerIOS::get_singleton()->update_gyroscope(Vector3(rotation.x, rotation.y, rotation.z).rotated(Vector3(0, 0, 1), Math_PI));
} break;
default: { // assume portrait
- DisplayServerIOS::get_singleton()->update_gravity(gravity.x, gravity.y, gravity.z);
- DisplayServerIOS::get_singleton()->update_accelerometer(acceleration.x + gravity.x, acceleration.y + gravity.y, acceleration.z + gravity.z);
- DisplayServerIOS::get_singleton()->update_magnetometer(magnetic.x, magnetic.y, magnetic.z);
- DisplayServerIOS::get_singleton()->update_gyroscope(rotation.x, rotation.y, rotation.z);
+ DisplayServerIOS::get_singleton()->update_gravity(Vector3(gravity.x, gravity.y, gravity.z));
+ DisplayServerIOS::get_singleton()->update_accelerometer(Vector3(acceleration.x + gravity.x, acceleration.y + gravity.y, acceleration.z + gravity.z));
+ DisplayServerIOS::get_singleton()->update_magnetometer(Vector3(magnetic.x, magnetic.y, magnetic.z));
+ DisplayServerIOS::get_singleton()->update_gyroscope(Vector3(rotation.x, rotation.y, rotation.z));
} break;
}
}