From 1366c2850f748ccb7613b076d86fdf7cdaac8214 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Sat, 30 Sep 2023 17:21:48 -0500 Subject: [PATCH 1/4] Fix `Actor.RotateAround` to rotate the actors orientation. --- Source/Engine/Level/Actor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Engine/Level/Actor.cs b/Source/Engine/Level/Actor.cs index 661b350cb..ff3c7c4fa 100644 --- a/Source/Engine/Level/Actor.cs +++ b/Source/Engine/Level/Actor.cs @@ -370,7 +370,7 @@ namespace FlaxEngine var q = Quaternion.RotationAxis(axis, angle * Mathf.DegreesToRadians); var dif = (transform.Translation - point) * q; transform.Translation = point + dif; - transform.Orientation = q; + transform.Orientation *= q; Transform = transform; } From cc681de30edf9e331777d5afb0cd6a6f347f571a Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Sat, 30 Sep 2023 21:33:27 -0500 Subject: [PATCH 2/4] Fix more and add bool check to orient the actor or not. --- Source/Engine/Level/Actor.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Source/Engine/Level/Actor.cs b/Source/Engine/Level/Actor.cs index ff3c7c4fa..bcb91a3bc 100644 --- a/Source/Engine/Level/Actor.cs +++ b/Source/Engine/Level/Actor.cs @@ -364,13 +364,20 @@ namespace FlaxEngine /// The point (world-space). /// The axis (normalized). /// The angle (in degrees). - public void RotateAround(Vector3 point, Vector3 axis, float angle) + /// /// Whether to orient the actor the same amount as rotation. + public void RotateAround(Vector3 point, Vector3 axis, float angle, bool orientActor = true) { var transform = Transform; var q = Quaternion.RotationAxis(axis, angle * Mathf.DegreesToRadians); var dif = (transform.Translation - point) * q; - transform.Translation = point + dif; - transform.Orientation *= q; + if (Vector3.NearEqual(point, transform.Translation)) + transform.Orientation *= q; + else + { + transform.Translation = point + dif; + if (orientActor) + transform.Orientation *= q; + } Transform = transform; } From 8edd50c293b0dfbcbd5b9c9ba5e10ee0337564d5 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Sat, 30 Sep 2023 21:34:40 -0500 Subject: [PATCH 3/4] Simplify --- Source/Engine/Level/Actor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Engine/Level/Actor.cs b/Source/Engine/Level/Actor.cs index bcb91a3bc..79e3d4716 100644 --- a/Source/Engine/Level/Actor.cs +++ b/Source/Engine/Level/Actor.cs @@ -369,11 +369,11 @@ namespace FlaxEngine { var transform = Transform; var q = Quaternion.RotationAxis(axis, angle * Mathf.DegreesToRadians); - var dif = (transform.Translation - point) * q; if (Vector3.NearEqual(point, transform.Translation)) transform.Orientation *= q; else { + var dif = (transform.Translation - point) * q; transform.Translation = point + dif; if (orientActor) transform.Orientation *= q; From b943c7ca3ebfd9a163d342a6bb0021bb2b715279 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Sat, 30 Sep 2023 22:19:09 -0500 Subject: [PATCH 4/4] Add extra check for stationary rotation. --- Source/Engine/Level/Actor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Engine/Level/Actor.cs b/Source/Engine/Level/Actor.cs index 79e3d4716..dbe8a89b5 100644 --- a/Source/Engine/Level/Actor.cs +++ b/Source/Engine/Level/Actor.cs @@ -369,7 +369,7 @@ namespace FlaxEngine { var transform = Transform; var q = Quaternion.RotationAxis(axis, angle * Mathf.DegreesToRadians); - if (Vector3.NearEqual(point, transform.Translation)) + if (Vector3.NearEqual(point, transform.Translation) && orientActor) transform.Orientation *= q; else {