diff options
author | antonWetzel <anton.wetzel.mail@gmail.com> | 2022-08-08 17:05:55 +0200 |
---|---|---|
committer | antonWetzel <anton.wetzel.mail@gmail.com> | 2022-08-09 01:59:17 +0200 |
commit | 40a1d6d100d8a1823d3a939a7ad7350b36bcddbd (patch) | |
tree | 65b06f486f70150e7110b1ad1dde3aa2f398c858 /modules/mono/glue | |
parent | 7355dfb502dbae6f13fbe42a9feeadb57affac0e (diff) |
vector4 distance_squared_to and update csharp
Diffstat (limited to 'modules/mono/glue')
-rw-r--r-- | modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs | 112 |
1 files changed, 107 insertions, 5 deletions
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs index 72fe9cb16f..4af817455c 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs @@ -140,7 +140,6 @@ namespace Godot } } - /// <summary> /// Returns a new vector with all components in absolute values (i.e. positive). /// </summary> @@ -178,16 +177,59 @@ namespace Godot ); } + /// <summary> + /// Performs a cubic interpolation between vectors <paramref name="preA"/>, this vector, + /// <paramref name="b"/>, and <paramref name="postB"/>, by the given amount <paramref name="weight"/>. + /// </summary> + /// <param name="b">The destination vector.</param> + /// <param name="preA">A vector before this vector.</param> + /// <param name="postB">A vector after <paramref name="b"/>.</param> + /// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param> + /// <returns>The interpolated vector.</returns> + public Vector4 CubicInterpolate(Vector4 b, Vector4 preA, Vector4 postB, real_t weight) + { + return new Vector4 + ( + Mathf.CubicInterpolate(x, b.x, preA.x, postB.x, weight), + Mathf.CubicInterpolate(y, b.y, preA.y, postB.y, weight), + Mathf.CubicInterpolate(y, b.z, preA.z, postB.z, weight), + Mathf.CubicInterpolate(w, b.w, preA.w, postB.w, weight) + ); + } /// <summary> - /// Returns a new vector with all components rounded down (towards negative infinity). + /// Returns the normalized vector pointing from this vector to <paramref name="to"/>. /// </summary> - /// <returns>A vector with <see cref="Mathf.Floor"/> called on each component.</returns> - public Vector4 Floor() + /// <param name="to">The other vector to point towards.</param> + /// <returns>The direction from this vector to <paramref name="to"/>.</returns> + public Vector4 DirectionTo(Vector4 to) { - return new Vector4(Mathf.Floor(x), Mathf.Floor(y), Mathf.Floor(z), Mathf.Floor(w)); + Vector4 ret = new Vector4(to.x - x, to.y - y, to.z - z, to.w - w); + ret.Normalize(); + return ret; } + /// <summary> + /// Returns the squared distance between this vector and <paramref name="to"/>. + /// This method runs faster than <see cref="DistanceTo"/>, so prefer it if + /// you need to compare vectors or need the squared distance for some formula. + /// </summary> + /// <param name="to">The other vector to use.</param> + /// <returns>The squared distance between the two vectors.</returns> + public real_t DistanceSquaredTo(Vector4 to) + { + return (to - this).LengthSquared(); + } + + /// <summary> + /// Returns the distance between this vector and <paramref name="to"/>. + /// </summary> + /// <param name="to">The other vector to use.</param> + /// <returns>The distance between the two vectors.</returns> + public real_t DistanceTo(Vector4 to) + { + return (to - this).Length(); + } /// <summary> /// Returns the dot product of this vector and <paramref name="with"/>. @@ -200,6 +242,15 @@ namespace Godot } /// <summary> + /// Returns a new vector with all components rounded down (towards negative infinity). + /// </summary> + /// <returns>A vector with <see cref="Mathf.Floor"/> called on each component.</returns> + public Vector4 Floor() + { + return new Vector4(Mathf.Floor(x), Mathf.Floor(y), Mathf.Floor(z), Mathf.Floor(w)); + } + + /// <summary> /// Returns the inverse of this vector. This is the same as <c>new Vector4(1 / v.x, 1 / v.y, 1 / v.z, 1 / v.w)</c>. /// </summary> /// <returns>The inverse of this vector.</returns> @@ -318,6 +369,42 @@ namespace Godot } /// <summary> + /// Returns a vector composed of the <see cref="Mathf.PosMod(real_t, real_t)"/> of this vector's components + /// and <paramref name="mod"/>. + /// </summary> + /// <param name="mod">A value representing the divisor of the operation.</param> + /// <returns> + /// A vector with each component <see cref="Mathf.PosMod(real_t, real_t)"/> by <paramref name="mod"/>. + /// </returns> + public Vector4 PosMod(real_t mod) + { + return new Vector4( + Mathf.PosMod(x, mod), + Mathf.PosMod(y, mod), + Mathf.PosMod(z, mod), + Mathf.PosMod(w, mod) + ); + } + + /// <summary> + /// Returns a vector composed of the <see cref="Mathf.PosMod(real_t, real_t)"/> of this vector's components + /// and <paramref name="modv"/>'s components. + /// </summary> + /// <param name="modv">A vector representing the divisors of the operation.</param> + /// <returns> + /// A vector with each component <see cref="Mathf.PosMod(real_t, real_t)"/> by <paramref name="modv"/>'s components. + /// </returns> + public Vector4 PosMod(Vector4 modv) + { + return new Vector4( + Mathf.PosMod(x, modv.x), + Mathf.PosMod(y, modv.y), + Mathf.PosMod(z, modv.z), + Mathf.PosMod(w, modv.w) + ); + } + + /// <summary> /// Returns this vector with all components rounded to the nearest integer, /// with halfway cases rounded towards the nearest multiple of two. /// </summary> @@ -343,6 +430,21 @@ namespace Godot return v; } + /// <summary> + /// Returns this vector with each component snapped to the nearest multiple of <paramref name="step"/>. + /// This can also be used to round to an arbitrary number of decimals. + /// </summary> + /// <param name="step">A vector value representing the step size to snap to.</param> + public Vector4 Snapped(Vector4 step) + { + return new Vector4( + Mathf.Snapped(x, step.x), + Mathf.Snapped(y, step.y), + Mathf.Snapped(z, step.z), + Mathf.Snapped(w, step.w) + ); + } + // Constants private static readonly Vector4 _zero = new Vector4(0, 0, 0, 0); private static readonly Vector4 _one = new Vector4(1, 1, 1, 1); |