Переглянути джерело

Merge pull request #71374 from raulsntos/dotnet/remove-spherical_interpolate_with

C#: Remove `SphericalInterpolateWith` from Transform3D
Rémi Verschelde 2 роки тому
батько
коміт
d6d87b6ca4

+ 18 - 32
modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs

@@ -115,16 +115,30 @@ namespace Godot
         }
 
         /// <summary>
-        /// Interpolates this transform to the other <paramref name="transform"/> by <paramref name="weight"/>.
+        /// Returns a transform interpolated between this transform and another
+        /// <paramref name="transform"/> by a given <paramref name="weight"/>
+        /// (on the range of 0.0 to 1.0).
         /// </summary>
         /// <param name="transform">The other transform.</param>
         /// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
         /// <returns>The interpolated transform.</returns>
         public readonly Transform3D InterpolateWith(Transform3D transform, real_t weight)
         {
-            Basis retBasis = basis.Lerp(transform.basis, weight);
-            Vector3 retOrigin = origin.Lerp(transform.origin, weight);
-            return new Transform3D(retBasis, retOrigin);
+            Vector3 sourceScale = basis.Scale;
+            Quaternion sourceRotation = basis.GetRotationQuaternion();
+            Vector3 sourceLocation = origin;
+
+            Vector3 destinationScale = transform.basis.Scale;
+            Quaternion destinationRotation = transform.basis.GetRotationQuaternion();
+            Vector3 destinationLocation = transform.origin;
+
+            var interpolated = new Transform3D();
+            Quaternion quaternion = sourceRotation.Slerp(destinationRotation, weight).Normalized();
+            Vector3 scale = sourceScale.Lerp(destinationScale, weight);
+            interpolated.basis.SetQuaternionScale(quaternion, scale);
+            interpolated.origin = sourceLocation.Lerp(destinationLocation, weight);
+
+            return interpolated;
         }
 
         /// <summary>
@@ -233,34 +247,6 @@ namespace Godot
             return new Transform3D(basis * tmpBasis, origin);
         }
 
-        /// <summary>
-        /// Returns a transform spherically interpolated between this transform and
-        /// another <paramref name="transform"/> by <paramref name="weight"/>.
-        /// </summary>
-        /// <param name="transform">The other transform.</param>
-        /// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
-        /// <returns>The interpolated transform.</returns>
-        public readonly Transform3D SphericalInterpolateWith(Transform3D transform, real_t weight)
-        {
-            /* not sure if very "efficient" but good enough? */
-
-            Vector3 sourceScale = basis.Scale;
-            Quaternion sourceRotation = basis.GetRotationQuaternion();
-            Vector3 sourceLocation = origin;
-
-            Vector3 destinationScale = transform.basis.Scale;
-            Quaternion destinationRotation = transform.basis.GetRotationQuaternion();
-            Vector3 destinationLocation = transform.origin;
-
-            var interpolated = new Transform3D();
-            Quaternion quaternion = sourceRotation.Slerp(destinationRotation, weight).Normalized();
-            Vector3 scale = sourceScale.Lerp(destinationScale, weight);
-            interpolated.basis.SetQuaternionScale(quaternion, scale);
-            interpolated.origin = sourceLocation.Lerp(destinationLocation, weight);
-
-            return interpolated;
-        }
-
         private void SetLookAt(Vector3 eye, Vector3 target, Vector3 up)
         {
             // Make rotation matrix