From 041a57138e8abc1dcd152e5bfbecb70d610993ff Mon Sep 17 00:00:00 2001 From: Dylan Wilson Date: Mon, 21 Dec 2015 15:41:31 +1000 Subject: [PATCH] completed a handful of vector2 extension methods --- .../Vector2ExtensionsTests.cs | 35 +++++++++++++++++++ Source/MonoGame.Extended/Vector2Extensions.cs | 18 ++++++++++ 2 files changed, 53 insertions(+) diff --git a/Source/MonoGame.Extended.Tests/Vector2ExtensionsTests.cs b/Source/MonoGame.Extended.Tests/Vector2ExtensionsTests.cs index 61eb76ea..851bf080 100644 --- a/Source/MonoGame.Extended.Tests/Vector2ExtensionsTests.cs +++ b/Source/MonoGame.Extended.Tests/Vector2ExtensionsTests.cs @@ -63,5 +63,40 @@ namespace MonoGame.Extended.Tests Assert.IsTrue(new Vector2(7.071068f, -7.071068f).EqualsWithTolerance(b)); } + + [Test] + public void Vector2_Truncate_Test() + { + var a = new Vector2(10, 10); + var b = a.Truncate(5); + + Assert.AreEqual(5f, b.Length(), 0.001f); + } + + [Test] + public void Vector2_IsNaN_Test() + { + var a = new Vector2(float.NaN, 10); + var b = new Vector2(10, float.NaN); + var c = new Vector2(float.NaN, float.NaN); + var d = new Vector2(10, 10); + + Assert.IsTrue(a.IsNaN()); + Assert.IsTrue(b.IsNaN()); + Assert.IsTrue(c.IsNaN()); + Assert.IsFalse(d.IsNaN()); + } + + [Test] + public void Vector2_ToAngle_Test() + { + var a = new Vector2(0, -10); + var b = new Vector2(10, 0); + var c = -Vector2.UnitY.Rotate(MathHelper.ToRadians(45)); + + Assert.AreEqual(MathHelper.ToRadians(0), a.ToAngle()); + Assert.AreEqual(MathHelper.ToRadians(90), b.ToAngle()); + Assert.AreEqual(MathHelper.ToRadians(45), c.ToAngle()); + } } } \ No newline at end of file diff --git a/Source/MonoGame.Extended/Vector2Extensions.cs b/Source/MonoGame.Extended/Vector2Extensions.cs index 14b25351..39b7f5d0 100644 --- a/Source/MonoGame.Extended/Vector2Extensions.cs +++ b/Source/MonoGame.Extended/Vector2Extensions.cs @@ -33,5 +33,23 @@ namespace MonoGame.Extended { return new Vector2(vector2.Y, -vector2.X); } + + public static Vector2 Truncate(this Vector2 vector2, float maxLength) + { + if (vector2.LengthSquared() > maxLength * maxLength) + return vector2.NormalizedCopy() * maxLength; + + return vector2; + } + + public static bool IsNaN(this Vector2 vector2) + { + return float.IsNaN(vector2.X) || float.IsNaN(vector2.Y); + } + + public static float ToAngle(this Vector2 vector2) + { + return (float) Math.Atan2(vector2.X, -vector2.Y); + } } } \ No newline at end of file