Ported Vecctor3 ClampLength to others and remade it using refs
This commit is contained in:
@@ -834,7 +834,53 @@ namespace FlaxEngine
|
||||
value.Normalize();
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Makes sure that Length of the output vector is always below max and above 0.
|
||||
/// </summary>
|
||||
/// <param name="vector">Input Vector.</param>
|
||||
/// <param name="max">Max Length</param>
|
||||
public static Vector2 ClampLength(Vector2 vector, float max)
|
||||
{
|
||||
return ClampLength(vector, 0, max);
|
||||
}
|
||||
/// <summary>
|
||||
/// Makes sure that Length of the output vector is always below max and above min.
|
||||
/// </summary>
|
||||
/// <param name="vector">Input Vector.</param>
|
||||
/// <param name="min">Min Length</param>
|
||||
/// <param name="max">Max Length</param>
|
||||
public static Vector2 ClampLength(Vector2 vector, float min, float max)
|
||||
{
|
||||
ClampLength(ref vector, min, max, out Vector2 retVect);
|
||||
return retVect;
|
||||
}
|
||||
/// <summary>
|
||||
/// Makes sure that Length of the output vector is always below max and above min.
|
||||
/// </summary>
|
||||
/// <param name="vector">Input Vector.</param>
|
||||
/// <param name="min">Min Length</param>
|
||||
/// <param name="max">Max Length</param>
|
||||
/// <param name="retVect">The Return Vector</param>
|
||||
public static void ClampLength(ref Vector2 vector, float min, float max, out Vector2 retVect)
|
||||
{
|
||||
retVect.X = vector.X;
|
||||
retVect.Y = vector.Y;
|
||||
|
||||
float lenSq = retVect.LengthSquared;
|
||||
if (lenSq > max * max)
|
||||
{
|
||||
float scaleFactor = max / (float)Math.Sqrt(lenSq);
|
||||
retVect.X = retVect.X * scaleFactor;
|
||||
retVect.Y = retVect.Y * scaleFactor;
|
||||
}
|
||||
if (lenSq < min * min)
|
||||
{
|
||||
float scaleFactor = min / (float)Math.Sqrt(lenSq);
|
||||
retVect.X = retVect.X * scaleFactor;
|
||||
retVect.Y = retVect.Y * scaleFactor;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Returns the vector with components rounded to the nearest integer.
|
||||
/// </summary>
|
||||
|
||||
@@ -1001,7 +1001,7 @@ namespace FlaxEngine
|
||||
/// <param name="max">Max Length</param>
|
||||
public static Vector3 ClampLength(Vector3 vector, float min, float max)
|
||||
{
|
||||
ClampLength(vector, min, max, out Vector3 retVect);
|
||||
ClampLength(ref vector, min, max, out Vector3 retVect);
|
||||
return retVect;
|
||||
}
|
||||
/// <summary>
|
||||
@@ -1011,24 +1011,27 @@ namespace FlaxEngine
|
||||
/// <param name="min">Min Length</param>
|
||||
/// <param name="max">Max Length</param>
|
||||
/// <param name="retVect">The Return Vector</param>
|
||||
public static void ClampLength(Vector3 vector, float min, float max, out Vector3 retVect)
|
||||
public static void ClampLength(ref Vector3 vector, float min, float max, out Vector3 retVect)
|
||||
{
|
||||
float lenSq = vector.LengthSquared;
|
||||
retVect.X = vector.X;
|
||||
retVect.Y = vector.Y;
|
||||
retVect.Z = vector.Z;
|
||||
|
||||
float lenSq = retVect.LengthSquared;
|
||||
if (lenSq > max * max)
|
||||
{
|
||||
float scaleFactor = max / (float)Math.Sqrt(lenSq);
|
||||
retVect.X = vector.X * scaleFactor;
|
||||
retVect.Y = vector.Y * scaleFactor;
|
||||
retVect.Z = vector.Z * scaleFactor;
|
||||
retVect.X = retVect.X * scaleFactor;
|
||||
retVect.Y = retVect.Y * scaleFactor;
|
||||
retVect.Z = retVect.Z * scaleFactor;
|
||||
}
|
||||
if (lenSq < min * min)
|
||||
{
|
||||
float scaleFactor = min / (float)Math.Sqrt(lenSq);
|
||||
retVect.X = vector.X * scaleFactor;
|
||||
retVect.Y = vector.Y * scaleFactor;
|
||||
retVect.Z = vector.Z * scaleFactor;
|
||||
retVect.X = retVect.X * scaleFactor;
|
||||
retVect.Y = retVect.Y * scaleFactor;
|
||||
retVect.Z = retVect.Z * scaleFactor;
|
||||
}
|
||||
return retVect;
|
||||
}
|
||||
/// <summary>
|
||||
/// Performs a linear interpolation between two vectors.
|
||||
|
||||
@@ -794,6 +794,58 @@ namespace FlaxEngine
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes sure that Length of the output vector is always below max and above 0.
|
||||
/// </summary>
|
||||
/// <param name="vector">Input Vector.</param>
|
||||
/// <param name="max">Max Length</param>
|
||||
public static Vector4 ClampLength(Vector4 vector, float max)
|
||||
{
|
||||
return ClampLength(vector, 0, max);
|
||||
}
|
||||
/// <summary>
|
||||
/// Makes sure that Length of the output vector is always below max and above min.
|
||||
/// </summary>
|
||||
/// <param name="vector">Input Vector.</param>
|
||||
/// <param name="min">Min Length</param>
|
||||
/// <param name="max">Max Length</param>
|
||||
public static Vector4 ClampLength(Vector4 vector, float min, float max)
|
||||
{
|
||||
ClampLength(ref vector, min, max, out Vector4 retVect);
|
||||
return retVect;
|
||||
}
|
||||
/// <summary>
|
||||
/// Makes sure that Length of the output vector is always below max and above min.
|
||||
/// </summary>
|
||||
/// <param name="vector">Input Vector.</param>
|
||||
/// <param name="min">Min Length</param>
|
||||
/// <param name="max">Max Length</param>
|
||||
/// <param name="retVect">The Return Vector</param>
|
||||
public static void ClampLength(ref Vector4 vector, float min, float max, out Vector4 retVect)
|
||||
{
|
||||
retVect.X = vector.X;
|
||||
retVect.Y = vector.Y;
|
||||
retVect.Z = vector.Z;
|
||||
retVect.W = vector.W;
|
||||
|
||||
float lenSq = retVect.LengthSquared;
|
||||
if (lenSq > max * max)
|
||||
{
|
||||
float scaleFactor = max / (float)Math.Sqrt(lenSq);
|
||||
retVect.X = retVect.X * scaleFactor;
|
||||
retVect.Y = retVect.Y * scaleFactor;
|
||||
retVect.Z = retVect.Z * scaleFactor;
|
||||
retVect.W = retVect.W * scaleFactor;
|
||||
}
|
||||
if (lenSq < min * min)
|
||||
{
|
||||
float scaleFactor = min / (float)Math.Sqrt(lenSq);
|
||||
retVect.X = retVect.X * scaleFactor;
|
||||
retVect.Y = retVect.Y * scaleFactor;
|
||||
retVect.Z = retVect.Z * scaleFactor;
|
||||
retVect.W = retVect.W * scaleFactor;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Performs a linear interpolation between two vectors.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user