diff --git a/Source/Engine/Core/Math/Vector3.cs b/Source/Engine/Core/Math/Vector3.cs
index 22dc1c84f..be885590a 100644
--- a/Source/Engine/Core/Math/Vector3.cs
+++ b/Source/Engine/Core/Math/Vector3.cs
@@ -1001,20 +1001,32 @@ namespace FlaxEngine
/// Max Length
public static Vector3 ClampLength(Vector3 vector, float min, float max)
{
- Vector3 retVect = new Vector3(vector.X, vector.Y, vector.Z);
- if (retVect.LengthSquared > max * max)
+ ClampLength(vector, min, max, out Vector3 retVect);
+ return retVect;
+ }
+ ///
+ /// Makes sure that Length of the output vector is always below max and above min.
+ ///
+ /// Input Vector.
+ /// Min Length
+ /// Max Length
+ /// The Return Vector
+ public static void ClampLength(Vector3 vector, float min, float max, out Vector3 retVect)
+ {
+ float lenSq = vector.LengthSquared;
+ if (lenSq > max * max)
{
- float scaleFactor = max / (float)Math.Sqrt(retVect.LengthSquared);
- retVect.X = retVect.X * scaleFactor;
- retVect.Y = retVect.Y * scaleFactor;
- retVect.Z = retVect.Z * scaleFactor;
+ float scaleFactor = max / (float)Math.Sqrt(lenSq);
+ retVect.X = vector.X * scaleFactor;
+ retVect.Y = vector.Y * scaleFactor;
+ retVect.Z = vector.Z * scaleFactor;
}
- if (retVect.LengthSquared < min * min)
+ if (lenSq < min * min)
{
- float scaleFactor = min / (float)Math.Sqrt(retVect.LengthSquared);
- retVect.X = retVect.X * scaleFactor;
- retVect.Y = retVect.Y * scaleFactor;
- retVect.Z = retVect.Z * scaleFactor;
+ float scaleFactor = min / (float)Math.Sqrt(lenSq);
+ retVect.X = vector.X * scaleFactor;
+ retVect.Y = vector.Y * scaleFactor;
+ retVect.Z = vector.Z * scaleFactor;
}
return retVect;
}