From 0f5e0d1637cc401f353fd4692c1279a87972bc85 Mon Sep 17 00:00:00 2001 From: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> Date: Thu, 2 May 2024 10:45:15 +0200 Subject: [PATCH] Expose `Vector*` component-wise and scalar `min/max` to scripting --- core/variant/variant_call.cpp | 24 +++++++ doc/classes/@GlobalScope.xml | 2 + doc/classes/Vector2.xml | 28 ++++++++ doc/classes/Vector2i.xml | 28 ++++++++ doc/classes/Vector3.xml | 28 ++++++++ doc/classes/Vector3i.xml | 28 ++++++++ doc/classes/Vector4.xml | 28 ++++++++ doc/classes/Vector4i.xml | 28 ++++++++ .../glue/GodotSharp/GodotSharp/Core/Aabb.cs | 2 +- .../glue/GodotSharp/GodotSharp/Core/Rect2.cs | 14 ++-- .../glue/GodotSharp/GodotSharp/Core/Rect2I.cs | 14 ++-- .../GodotSharp/GodotSharp/Core/Vector2.cs | 64 +++++++++++++++++ .../GodotSharp/GodotSharp/Core/Vector2I.cs | 64 +++++++++++++++++ .../GodotSharp/GodotSharp/Core/Vector3.cs | 51 +++++++++++++ .../GodotSharp/GodotSharp/Core/Vector3I.cs | 68 ++++++++++++++++++ .../GodotSharp/GodotSharp/Core/Vector4.cs | 72 +++++++++++++++++++ .../GodotSharp/GodotSharp/Core/Vector4I.cs | 72 +++++++++++++++++++ 17 files changed, 596 insertions(+), 19 deletions(-) diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp index 08fb2a9c9160..986b34c662e7 100644 --- a/core/variant/variant_call.cpp +++ b/core/variant/variant_call.cpp @@ -1807,6 +1807,10 @@ static void _register_variant_builtin_methods() { bind_method(Vector2, clampf, sarray("min", "max"), varray()); bind_method(Vector2, snapped, sarray("step"), varray()); bind_method(Vector2, snappedf, sarray("step"), varray()); + bind_method(Vector2, min, sarray("with"), varray()); + bind_method(Vector2, minf, sarray("with"), varray()); + bind_method(Vector2, max, sarray("with"), varray()); + bind_method(Vector2, maxf, sarray("with"), varray()); bind_static_method(Vector2, from_angle, sarray("angle"), varray()); @@ -1825,6 +1829,10 @@ static void _register_variant_builtin_methods() { bind_method(Vector2i, clampi, sarray("min", "max"), varray()); bind_method(Vector2i, snapped, sarray("step"), varray()); bind_method(Vector2i, snappedi, sarray("step"), varray()); + bind_method(Vector2i, min, sarray("with"), varray()); + bind_method(Vector2i, mini, sarray("with"), varray()); + bind_method(Vector2i, max, sarray("with"), varray()); + bind_method(Vector2i, maxi, sarray("with"), varray()); /* Rect2 */ @@ -1905,6 +1913,10 @@ static void _register_variant_builtin_methods() { bind_method(Vector3, reflect, sarray("n"), varray()); bind_method(Vector3, sign, sarray(), varray()); bind_method(Vector3, octahedron_encode, sarray(), varray()); + bind_method(Vector3, min, sarray("with"), varray()); + bind_method(Vector3, minf, sarray("with"), varray()); + bind_method(Vector3, max, sarray("with"), varray()); + bind_method(Vector3, maxf, sarray("with"), varray()); bind_static_method(Vector3, octahedron_decode, sarray("uv"), varray()); /* Vector3i */ @@ -1921,6 +1933,10 @@ static void _register_variant_builtin_methods() { bind_method(Vector3i, clampi, sarray("min", "max"), varray()); bind_method(Vector3i, snapped, sarray("step"), varray()); bind_method(Vector3i, snappedi, sarray("step"), varray()); + bind_method(Vector3i, min, sarray("with"), varray()); + bind_method(Vector3i, mini, sarray("with"), varray()); + bind_method(Vector3i, max, sarray("with"), varray()); + bind_method(Vector3i, maxi, sarray("with"), varray()); /* Vector4 */ @@ -1952,6 +1968,10 @@ static void _register_variant_builtin_methods() { bind_method(Vector4, is_equal_approx, sarray("to"), varray()); bind_method(Vector4, is_zero_approx, sarray(), varray()); bind_method(Vector4, is_finite, sarray(), varray()); + bind_method(Vector4, min, sarray("with"), varray()); + bind_method(Vector4, minf, sarray("with"), varray()); + bind_method(Vector4, max, sarray("with"), varray()); + bind_method(Vector4, maxf, sarray("with"), varray()); /* Vector4i */ @@ -1965,6 +1985,10 @@ static void _register_variant_builtin_methods() { bind_method(Vector4i, clampi, sarray("min", "max"), varray()); bind_method(Vector4i, snapped, sarray("step"), varray()); bind_method(Vector4i, snappedi, sarray("step"), varray()); + bind_method(Vector4i, min, sarray("with"), varray()); + bind_method(Vector4i, mini, sarray("with"), varray()); + bind_method(Vector4i, max, sarray("with"), varray()); + bind_method(Vector4i, maxi, sarray("with"), varray()); bind_method(Vector4i, distance_to, sarray("to"), varray()); bind_method(Vector4i, distance_squared_to, sarray("to"), varray()); diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 0307684588e1..f2a6517a0cb6 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -696,6 +696,7 @@ [codeblock] max(1, 7, 3, -6, 5) # Returns 7 [/codeblock] + [b]Note:[/b] When using this on vectors it will [i]not[/i] perform component-wise maximum, and will pick the largest value when compared using [code]x < y[/code]. To perform component-wise maximum, use [method Vector2.max], [method Vector2i.max], [method Vector3.max], [method Vector3i.max], [method Vector4.max], and [method Vector4i.max]. @@ -729,6 +730,7 @@ [codeblock] min(1, 7, 3, -6, 5) # Returns -6 [/codeblock] + [b]Note:[/b] When using this on vectors it will [i]not[/i] perform component-wise minimum, and will pick the smallest value when compared using [code]x < y[/code]. To perform component-wise minimum, use [method Vector2.min], [method Vector2i.min], [method Vector3.min], [method Vector3i.min], [method Vector4.min], and [method Vector4i.min]. diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml index 961a60060a7d..5fadfd0d9573 100644 --- a/doc/classes/Vector2.xml +++ b/doc/classes/Vector2.xml @@ -273,18 +273,46 @@ Returns the vector with a maximum length by limiting its length to [param length]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector2(maxf(x, with.x), maxf(y, with.y))[/code]. + + Returns the axis of the vector's highest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_X]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector2(maxf(x, with), maxf(y, with))[/code]. + + + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector2(minf(x, with.x), minf(y, with.y))[/code]. + + Returns the axis of the vector's lowest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_Y]. + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector2(minf(x, with), minf(y, with))[/code]. + + diff --git a/doc/classes/Vector2i.xml b/doc/classes/Vector2i.xml index db848e318670..4afc62e03878 100644 --- a/doc/classes/Vector2i.xml +++ b/doc/classes/Vector2i.xml @@ -100,18 +100,46 @@ This method runs faster than [method length], so prefer it if you need to compare vectors or need the squared distance for some formula. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector2i(maxi(x, with.x), maxi(y, with.y))[/code]. + + Returns the axis of the vector's highest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_X]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector2i(maxi(x, with), maxi(y, with))[/code]. + + + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector2i(mini(x, with.x), mini(y, with.y))[/code]. + + Returns the axis of the vector's lowest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_Y]. + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector2i(mini(x, with), mini(y, with))[/code]. + + diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml index a98ed479d4a3..387359a97f69 100644 --- a/doc/classes/Vector3.xml +++ b/doc/classes/Vector3.xml @@ -242,18 +242,46 @@ Returns the vector with a maximum length by limiting its length to [param length]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector3(maxf(x, with.x), maxf(y, with.y), maxf(z, with.z))[/code]. + + Returns the axis of the vector's highest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_X]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector3(maxf(x, with), maxf(y, with), maxf(z, with))[/code]. + + + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector3(minf(x, with.x), minf(y, with.y), minf(z, with.z))[/code]. + + Returns the axis of the vector's lowest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_Z]. + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector3(minf(x, with), minf(y, with), minf(z, with))[/code]. + + diff --git a/doc/classes/Vector3i.xml b/doc/classes/Vector3i.xml index 8fc030968508..df4624dbb100 100644 --- a/doc/classes/Vector3i.xml +++ b/doc/classes/Vector3i.xml @@ -95,18 +95,46 @@ This method runs faster than [method length], so prefer it if you need to compare vectors or need the squared distance for some formula. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector3i(maxi(x, with.x), maxi(y, with.y), maxi(z, with.z))[/code]. + + Returns the axis of the vector's highest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_X]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector3i(maxi(x, with), maxi(y, with), maxi(z, with))[/code]. + + + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector3i(mini(x, with.x), mini(y, with.y), mini(z, with.z))[/code]. + + Returns the axis of the vector's lowest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_Z]. + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector3i(mini(x, with), mini(y, with), mini(z, with))[/code]. + + diff --git a/doc/classes/Vector4.xml b/doc/classes/Vector4.xml index 49cf726086ba..87af370462ec 100644 --- a/doc/classes/Vector4.xml +++ b/doc/classes/Vector4.xml @@ -184,18 +184,46 @@ Returns the result of the linear interpolation between this vector and [param to] by amount [param weight]. [param weight] is on the range of [code]0.0[/code] to [code]1.0[/code], representing the amount of interpolation. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector4(maxf(x, with.x), maxf(y, with.y), maxf(z, with.z), maxf(w, with.w))[/code]. + + Returns the axis of the vector's highest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_X]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector4(maxf(x, with), maxf(y, with), maxf(z, with), maxf(w, with))[/code]. + + + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector4(minf(x, with.x), minf(y, with.y), minf(z, with.z), minf(w, with.w))[/code]. + + Returns the axis of the vector's lowest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_W]. + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector4(minf(x, with), minf(y, with), minf(z, with), minf(w, with))[/code]. + + diff --git a/doc/classes/Vector4i.xml b/doc/classes/Vector4i.xml index ade558dd0624..8f54b767e007 100644 --- a/doc/classes/Vector4i.xml +++ b/doc/classes/Vector4i.xml @@ -93,18 +93,46 @@ This method runs faster than [method length], so prefer it if you need to compare vectors or need the squared distance for some formula. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector4i(maxi(x, with.x), maxi(y, with.y), maxi(z, with.z), maxi(w, with.w))[/code]. + + Returns the axis of the vector's highest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_X]. + + + + + Returns the component-wise maximum of this and [param with], equivalent to [code]Vector4i(maxi(x, with), maxi(y, with), maxi(z, with), maxi(w, with))[/code]. + + + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector4i(mini(x, with.x), mini(y, with.y), mini(z, with.z), mini(w, with.w))[/code]. + + Returns the axis of the vector's lowest value. See [code]AXIS_*[/code] constants. If all components are equal, this method returns [constant AXIS_W]. + + + + + Returns the component-wise minimum of this and [param with], equivalent to [code]Vector4i(mini(x, with), mini(y, with), mini(z, with), mini(w, with))[/code]. + + diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs index feaa1d07dadb..ab7f8ede44a5 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs @@ -69,7 +69,7 @@ public readonly real_t Volume public readonly Aabb Abs() { Vector3 end = End; - Vector3 topLeft = new Vector3(Mathf.Min(_position.X, end.X), Mathf.Min(_position.Y, end.Y), Mathf.Min(_position.Z, end.Z)); + Vector3 topLeft = end.Min(_position); return new Aabb(topLeft, _size.Abs()); } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs index 9d9065911ee6..19721b6ccaf4 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs @@ -69,7 +69,7 @@ public readonly real_t Area public readonly Rect2 Abs() { Vector2 end = End; - Vector2 topLeft = new Vector2(Mathf.Min(_position.X, end.X), Mathf.Min(_position.Y, end.Y)); + Vector2 topLeft = end.Min(_position); return new Rect2(topLeft, _size.Abs()); } @@ -91,14 +91,12 @@ public readonly Rect2 Intersection(Rect2 b) return new Rect2(); } - newRect._position.X = Mathf.Max(b._position.X, _position.X); - newRect._position.Y = Mathf.Max(b._position.Y, _position.Y); + newRect._position = b._position.Max(_position); Vector2 bEnd = b._position + b._size; Vector2 end = _position + _size; - newRect._size.X = Mathf.Min(bEnd.X, end.X) - newRect._position.X; - newRect._size.Y = Mathf.Min(bEnd.Y, end.Y) - newRect._position.Y; + newRect._size = bEnd.Min(end) - newRect._position; return newRect; } @@ -338,11 +336,9 @@ public readonly Rect2 Merge(Rect2 b) { Rect2 newRect; - newRect._position.X = Mathf.Min(b._position.X, _position.X); - newRect._position.Y = Mathf.Min(b._position.Y, _position.Y); + newRect._position = b._position.Min(_position); - newRect._size.X = Mathf.Max(b._position.X + b._size.X, _position.X + _size.X); - newRect._size.Y = Mathf.Max(b._position.Y + b._size.Y, _position.Y + _size.Y); + newRect._size = (b._position + b._size).Max(_position + _size); newRect._size -= newRect._position; // Make relative again diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2I.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2I.cs index 65704b3da7b1..7ee9ff85527e 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2I.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2I.cs @@ -69,7 +69,7 @@ public readonly int Area public readonly Rect2I Abs() { Vector2I end = End; - Vector2I topLeft = new Vector2I(Mathf.Min(_position.X, end.X), Mathf.Min(_position.Y, end.Y)); + Vector2I topLeft = end.Min(_position); return new Rect2I(topLeft, _size.Abs()); } @@ -91,14 +91,12 @@ public readonly Rect2I Intersection(Rect2I b) return new Rect2I(); } - newRect._position.X = Mathf.Max(b._position.X, _position.X); - newRect._position.Y = Mathf.Max(b._position.Y, _position.Y); + newRect._position = b._position.Max(_position); Vector2I bEnd = b._position + b._size; Vector2I end = _position + _size; - newRect._size.X = Mathf.Min(bEnd.X, end.X) - newRect._position.X; - newRect._size.Y = Mathf.Min(bEnd.Y, end.Y) - newRect._position.Y; + newRect._size = bEnd.Min(end) - newRect._position; return newRect; } @@ -295,11 +293,9 @@ public readonly Rect2I Merge(Rect2I b) { Rect2I newRect; - newRect._position.X = Mathf.Min(b._position.X, _position.X); - newRect._position.Y = Mathf.Min(b._position.Y, _position.Y); + newRect._position = b._position.Min(_position); - newRect._size.X = Mathf.Max(b._position.X + b._size.X, _position.X + _size.X); - newRect._size.Y = Mathf.Max(b._position.Y + b._size.Y, _position.Y + _size.Y); + newRect._size = (b._position + b._size).Max(_position + _size); newRect._size -= newRect._position; // Make relative again diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs index 16de0280450e..50bf56d8320c 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs @@ -429,6 +429,70 @@ public readonly Vector2 LimitLength(real_t length = 1.0f) return v; } + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector2(Mathf.Max(X, with.X), Mathf.Max(Y, with.Y)). + /// + /// The other vector to use. + /// The resulting maximum vector. + public readonly Vector2 Max(Vector2 with) + { + return new Vector2 + ( + Mathf.Max(X, with.X), + Mathf.Max(Y, with.Y) + ); + } + + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector2(Mathf.Max(X, with), Mathf.Max(Y, with)). + /// + /// The other value to use. + /// The resulting maximum vector. + public readonly Vector2 Max(real_t with) + { + return new Vector2 + ( + Mathf.Max(X, with), + Mathf.Max(Y, with) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector2(Mathf.Min(X, with.X), Mathf.Min(Y, with.Y)). + /// + /// The other vector to use. + /// The resulting minimum vector. + public readonly Vector2 Min(Vector2 with) + { + return new Vector2 + ( + Mathf.Min(X, with.X), + Mathf.Min(Y, with.Y) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector2(Mathf.Min(X, with), Mathf.Min(Y, with)). + /// + /// The other value to use. + /// The resulting minimum vector. + public readonly Vector2 Min(real_t with) + { + return new Vector2 + ( + Mathf.Min(X, with), + Mathf.Min(Y, with) + ); + } + /// /// Returns the axis of the vector's highest value. See . /// If both components are equal, this method returns . diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs index 3d11a15e281b..9442db4d860e 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs @@ -191,6 +191,70 @@ public readonly int LengthSquared() return x2 + y2; } + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector2I(Mathf.Max(X, with.X), Mathf.Max(Y, with.Y)). + /// + /// The other vector to use. + /// The resulting maximum vector. + public readonly Vector2I Max(Vector2I with) + { + return new Vector2I + ( + Mathf.Max(X, with.X), + Mathf.Max(Y, with.Y) + ); + } + + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector2I(Mathf.Max(X, with), Mathf.Max(Y, with)). + /// + /// The other value to use. + /// The resulting maximum vector. + public readonly Vector2I Max(int with) + { + return new Vector2I + ( + Mathf.Max(X, with), + Mathf.Max(Y, with) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector2I(Mathf.Min(X, with.X), Mathf.Min(Y, with.Y)). + /// + /// The other vector to use. + /// The resulting minimum vector. + public readonly Vector2I Min(Vector2I with) + { + return new Vector2I + ( + Mathf.Min(X, with.X), + Mathf.Min(Y, with.Y) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector2I(Mathf.Min(X, with), Mathf.Min(Y, with)). + /// + /// The other value to use. + /// The resulting minimum vector. + public readonly Vector2I Min(int with) + { + return new Vector2I + ( + Mathf.Min(X, with), + Mathf.Min(Y, with) + ); + } + /// /// Returns the axis of the vector's highest value. See . /// If both components are equal, this method returns . diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs index a2d5c012c0d8..27f2713efa79 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs @@ -436,6 +436,57 @@ public readonly Vector3 LimitLength(real_t length = 1.0f) return v; } + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector3(Mathf.Max(X, with.X), Mathf.Max(Y, with.Y), Mathf.Max(Z, with.Z)). + /// + /// The other vector to use. + /// The resulting maximum vector. + public readonly Vector3 Max(Vector3 with) + { + return new Vector3 + ( + Mathf.Max(X, with.X), + Mathf.Max(Y, with.Y), + Mathf.Max(Z, with.Z) + ); + } + + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector3(Mathf.Max(X, with), Mathf.Max(Y, with), Mathf.Max(Z, with)). + /// + /// The other value to use. + /// The resulting maximum vector. + public readonly Vector3 Max(real_t with) + { + return new Vector3 + ( + Mathf.Max(X, with), + Mathf.Max(Y, with), + Mathf.Max(Z, with) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector3(Mathf.Min(X, with.X), Mathf.Min(Y, with.Y), Mathf.Min(Z, with.Z)). + /// + /// The other vector to use. + /// The resulting minimum vector. + public readonly Vector3 Min(Vector3 with) + { + return new Vector3 + ( + Mathf.Min(X, with.X), + Mathf.Min(Y, with.Y), + Mathf.Min(Z, with.Z) + ); + } + /// /// Returns the axis of the vector's highest value. See . /// If all components are equal, this method returns . diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs index 642c73a8ecd1..8312e2c231dd 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs @@ -202,6 +202,74 @@ public readonly int LengthSquared() return x2 + y2 + z2; } + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector3I(Mathf.Max(X, with.X), Mathf.Max(Y, with.Y), Mathf.Max(Z, with.Z)). + /// + /// The other vector to use. + /// The resulting maximum vector. + public readonly Vector3I Max(Vector3I with) + { + return new Vector3I + ( + Mathf.Max(X, with.X), + Mathf.Max(Y, with.Y), + Mathf.Max(Z, with.Z) + ); + } + + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector3I(Mathf.Max(X, with), Mathf.Max(Y, with), Mathf.Max(Z, with)). + /// + /// The other value to use. + /// The resulting maximum vector. + public readonly Vector3I Max(int with) + { + return new Vector3I + ( + Mathf.Max(X, with), + Mathf.Max(Y, with), + Mathf.Max(Z, with) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector3I(Mathf.Min(X, with.X), Mathf.Min(Y, with.Y), Mathf.Min(Z, with.Z)). + /// + /// The other vector to use. + /// The resulting minimum vector. + public readonly Vector3I Min(Vector3I with) + { + return new Vector3I + ( + Mathf.Min(X, with.X), + Mathf.Min(Y, with.Y), + Mathf.Min(Z, with.Z) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector3I(Mathf.Min(X, with), Mathf.Min(Y, with), Mathf.Min(Z, with)). + /// + /// The other value to use. + /// The resulting minimum vector. + public readonly Vector3I Min(int with) + { + return new Vector3I + ( + Mathf.Min(X, with), + Mathf.Min(Y, with), + Mathf.Min(Z, with) + ); + } + /// /// Returns the axis of the vector's highest value. See . /// If all components are equal, this method returns . diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs index 9862dfdab624..ec59197fa33f 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs @@ -370,6 +370,78 @@ public readonly Vector4 Lerp(Vector4 to, real_t weight) ); } + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector4(Mathf.Max(X, with.X), Mathf.Max(Y, with.Y), Mathf.Max(Z, with.Z), Mathf.Max(W, with.W)). + /// + /// The other vector to use. + /// The resulting maximum vector. + public readonly Vector4 Max(Vector4 with) + { + return new Vector4 + ( + Mathf.Max(X, with.X), + Mathf.Max(Y, with.Y), + Mathf.Max(Z, with.Z), + Mathf.Max(W, with.W) + ); + } + + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector4(Mathf.Max(X, with), Mathf.Max(Y, with), Mathf.Max(Z, with), Mathf.Max(W, with)). + /// + /// The other value to use. + /// The resulting maximum vector. + public readonly Vector4 Max(real_t with) + { + return new Vector4 + ( + Mathf.Max(X, with), + Mathf.Max(Y, with), + Mathf.Max(Z, with), + Mathf.Max(W, with) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector4(Mathf.Min(X, with.X), Mathf.Min(Y, with.Y), Mathf.Min(Z, with.Z), Mathf.Min(W, with.W)). + /// + /// The other vector to use. + /// The resulting minimum vector. + public readonly Vector4 Min(Vector4 with) + { + return new Vector4 + ( + Mathf.Min(X, with.X), + Mathf.Min(Y, with.Y), + Mathf.Min(Z, with.Z), + Mathf.Min(W, with.W) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector4(Mathf.Min(X, with), Mathf.Min(Y, with), Mathf.Min(Z, with), Mathf.Min(W, with)). + /// + /// The other value to use. + /// The resulting minimum vector. + public readonly Vector4 Min(real_t with) + { + return new Vector4 + ( + Mathf.Min(X, with), + Mathf.Min(Y, with), + Mathf.Min(Z, with), + Mathf.Min(W, with) + ); + } + /// /// Returns the axis of the vector's highest value. See . /// If all components are equal, this method returns . diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs index 321f985209d3..ba8e54b88b91 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs @@ -222,6 +222,78 @@ public readonly int LengthSquared() return x2 + y2 + z2 + w2; } + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector4I(Mathf.Max(X, with.X), Mathf.Max(Y, with.Y), Mathf.Max(Z, with.Z), Mathf.Max(W, with.W)). + /// + /// The other vector to use. + /// The resulting maximum vector. + public readonly Vector4I Max(Vector4I with) + { + return new Vector4I + ( + Mathf.Max(X, with.X), + Mathf.Max(Y, with.Y), + Mathf.Max(Z, with.Z), + Mathf.Max(W, with.W) + ); + } + + /// + /// Returns the result of the component-wise maximum between + /// this vector and . + /// Equivalent to new Vector4I(Mathf.Max(X, with), Mathf.Max(Y, with), Mathf.Max(Z, with), Mathf.Max(W, with)). + /// + /// The other value to use. + /// The resulting maximum vector. + public readonly Vector4I Max(int with) + { + return new Vector4I + ( + Mathf.Max(X, with), + Mathf.Max(Y, with), + Mathf.Max(Z, with), + Mathf.Max(W, with) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector4I(Mathf.Min(X, with.X), Mathf.Min(Y, with.Y), Mathf.Min(Z, with.Z), Mathf.Min(W, with.W)). + /// + /// The other vector to use. + /// The resulting minimum vector. + public readonly Vector4I Min(Vector4I with) + { + return new Vector4I + ( + Mathf.Min(X, with.X), + Mathf.Min(Y, with.Y), + Mathf.Min(Z, with.Z), + Mathf.Min(W, with.W) + ); + } + + /// + /// Returns the result of the component-wise minimum between + /// this vector and . + /// Equivalent to new Vector4I(Mathf.Min(X, with), Mathf.Min(Y, with), Mathf.Min(Z, with), Mathf.Min(W, with)). + /// + /// The other value to use. + /// The resulting minimum vector. + public readonly Vector4I Min(int with) + { + return new Vector4I + ( + Mathf.Min(X, with), + Mathf.Min(Y, with), + Mathf.Min(Z, with), + Mathf.Min(W, with) + ); + } + /// /// Returns the axis of the vector's highest value. See . /// If all components are equal, this method returns .