Add MoveTowards to vector3
This commit is contained in:
@@ -1054,6 +1054,23 @@ namespace FlaxEngine
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Moves a value current towards target.
|
||||
/// </summary>
|
||||
/// <param name="current">The position to move from.</param>
|
||||
/// <param name="target">The position to move towards.</param>
|
||||
/// <param name="maxDistanceDelta">The maximum distance that can be applied to the value.</param>
|
||||
/// <returns>The new position.</returns>
|
||||
public static Double3 MoveTowards(Double3 current, Double3 target, double maxDistanceDelta)
|
||||
{
|
||||
var to = target - current;
|
||||
var distanceSq = to.LengthSquared;
|
||||
if (distanceSq == 0 || (maxDistanceDelta >= 0 && distanceSq <= maxDistanceDelta * maxDistanceDelta))
|
||||
return target;
|
||||
var scale = maxDistanceDelta / Mathd.Sqrt(distanceSq);
|
||||
return new Double3(current.X + to.X * scale, current.Y + to.Y * scale, current.Z + to.Z * scale);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs a Hermite spline interpolation.
|
||||
/// </summary>
|
||||
|
||||
@@ -1038,6 +1038,23 @@ namespace FlaxEngine
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Moves a value current towards target.
|
||||
/// </summary>
|
||||
/// <param name="current">The position to move from.</param>
|
||||
/// <param name="target">The position to move towards.</param>
|
||||
/// <param name="maxDistanceDelta">The maximum distance that can be applied to the value.</param>
|
||||
/// <returns>The new position.</returns>
|
||||
public static Float3 MoveTowards(Float3 current, Float3 target, float maxDistanceDelta)
|
||||
{
|
||||
var to = target - current;
|
||||
var distanceSq = to.LengthSquared;
|
||||
if (distanceSq == 0 || (maxDistanceDelta >= 0 && distanceSq <= maxDistanceDelta * maxDistanceDelta))
|
||||
return target;
|
||||
var scale = maxDistanceDelta / Mathf.Sqrt(distanceSq);
|
||||
return new Float3(current.X + to.X * scale, current.Y + to.Y * scale, current.Z + to.Z * scale);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs a Hermite spline interpolation.
|
||||
/// </summary>
|
||||
|
||||
@@ -1068,6 +1068,23 @@ namespace FlaxEngine
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Moves a value current towards target.
|
||||
/// </summary>
|
||||
/// <param name="current">The position to move from.</param>
|
||||
/// <param name="target">The position to move towards.</param>
|
||||
/// <param name="maxDistanceDelta">The maximum distance that can be applied to the value.</param>
|
||||
/// <returns>The new position.</returns>
|
||||
public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta)
|
||||
{
|
||||
var to = target - current;
|
||||
var distanceSq = to.LengthSquared;
|
||||
if (distanceSq == 0 || (maxDistanceDelta >= 0 && distanceSq <= maxDistanceDelta * maxDistanceDelta))
|
||||
return target;
|
||||
var scale = maxDistanceDelta / Mathr.Sqrt(distanceSq);
|
||||
return new Vector3(current.X + to.X * scale, current.Y + to.Y * scale, current.Z + to.Z * scale);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs a Hermite spline interpolation.
|
||||
/// </summary>
|
||||
|
||||
@@ -727,6 +727,23 @@ public:
|
||||
Lerp(start, end, amount, result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Moves a value current towards target.
|
||||
/// </summary>
|
||||
/// <param name="current">The position to move from.</param>
|
||||
/// <param name="target">The position to move towards.</param>
|
||||
/// <param name="maxDistanceDelta">The maximum distance that can be applied to the value.</param>
|
||||
/// <returns>The new position.</returns>
|
||||
static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta)
|
||||
{
|
||||
const Vector3Base to = target - current;
|
||||
const T distanceSq = to.LengthSquared();
|
||||
if (distanceSq == 0 || (maxDistanceDelta >= 0 && distanceSq <= maxDistanceDelta * maxDistanceDelta))
|
||||
return target;
|
||||
const T scale = maxDistanceDelta / Math::Sqrt(distanceSq);
|
||||
return Vector3Base(current.X + to.X * scale, current.Y + to.Y * scale, current.Z + to.Z * scale);
|
||||
}
|
||||
|
||||
// Performs a Hermite spline interpolation.
|
||||
// @param value1 First source position vector
|
||||
// @param tangent1 First source tangent vector
|
||||
|
||||
Reference in New Issue
Block a user