mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
added some more utility functions for directions and vectors
This commit is contained in:
parent
3a1b73934b
commit
52443bfa68
3 changed files with 38 additions and 0 deletions
|
@ -59,6 +59,21 @@ namespace MLEM.Extensions {
|
||||||
return new Vector4(vec.X.Floor(), vec.Y.Floor(), vec.Z.Floor(), vec.W.Floor());
|
return new Vector4(vec.X.Floor(), vec.Y.Floor(), vec.Z.Floor(), vec.W.Floor());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc cref="Math.Ceiling(decimal)"/>
|
||||||
|
public static Vector2 CeilCopy(this Vector2 vec) {
|
||||||
|
return new Vector2(vec.X.Ceil(), vec.Y.Ceil());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc cref="Math.Ceiling(decimal)"/>
|
||||||
|
public static Vector3 CeilCopy(this Vector3 vec) {
|
||||||
|
return new Vector3(vec.X.Ceil(), vec.Y.Ceil(), vec.Z.Ceil());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc cref="Math.Ceiling(decimal)"/>
|
||||||
|
public static Vector4 CeilCopy(this Vector4 vec) {
|
||||||
|
return new Vector4(vec.X.Ceil(), vec.Y.Ceil(), vec.Z.Ceil(), vec.W.Ceil());
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Multiplies a point by a given scalar.
|
/// Multiplies a point by a given scalar.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -184,5 +199,6 @@ namespace MLEM.Extensions {
|
||||||
matrix.M31 / scZ, matrix.M32 / scZ, matrix.M33 / scZ, 0,
|
matrix.M31 / scZ, matrix.M32 / scZ, matrix.M33 / scZ, 0,
|
||||||
0, 0, 0, 1));
|
0, 0, 0, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,6 +2,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
|
using MLEM.Extensions;
|
||||||
|
|
||||||
namespace MLEM.Misc {
|
namespace MLEM.Misc {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -229,5 +230,19 @@ namespace MLEM.Misc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the <see cref="Direction2"/> that is closest to the given position's facing direction.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="offset">The vector whose corresponding direction to get</param>
|
||||||
|
/// <returns>The vector's direction</returns>
|
||||||
|
public static Direction2 ToDirection(this Vector2 offset) {
|
||||||
|
var offsetAngle = (float) Math.Atan2(offset.Y, offset.X);
|
||||||
|
foreach (var dir in AllExceptNone) {
|
||||||
|
if (Math.Abs(dir.Angle() - offsetAngle) <= MathHelper.PiOver4 / 2)
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
return Direction2.None;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -100,6 +100,13 @@ namespace Sandbox {
|
||||||
};
|
};
|
||||||
Console.WriteLine(obj);
|
Console.WriteLine(obj);
|
||||||
|
|
||||||
|
for (var i = 0; i < 360; i += 45) {
|
||||||
|
var rad = MathHelper.ToRadians(i);
|
||||||
|
var vec = new Vector2((float) Math.Sin(rad), (float) Math.Cos(rad));
|
||||||
|
var dir = vec.ToDirection();
|
||||||
|
Console.WriteLine(vec + " -> " + dir);
|
||||||
|
}
|
||||||
|
|
||||||
var copy = obj.DeepCopy();
|
var copy = obj.DeepCopy();
|
||||||
Console.WriteLine(copy);
|
Console.WriteLine(copy);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue