mirror of
https://github.com/oliverbooth/VpSharp
synced 2024-11-26 05:58:47 +00:00
Add Heading enum
This commit is contained in:
parent
5e30ef3877
commit
68fa2203d6
@ -5,6 +5,21 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly partial struct Coordinates : IEquatable<Coordinates>
|
public readonly partial struct Coordinates : IEquatable<Coordinates>
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="Coordinates" /> struct.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">The X coordinate.</param>
|
||||||
|
/// <param name="y">The Y coordinate.</param>
|
||||||
|
/// <param name="z">The Z coordinate.</param>
|
||||||
|
/// <param name="yaw">The yaw.</param>
|
||||||
|
/// <param name="isRelative">
|
||||||
|
/// <see langword="true" /> if these coordinates represent relative coordinates; <see langword="false" /> otherwise.
|
||||||
|
/// </param>
|
||||||
|
public Coordinates(double x, double y, double z, Heading yaw, bool isRelative = false)
|
||||||
|
: this(null, x, y, z, yaw.ToHeading(), isRelative)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="Coordinates" /> struct.
|
/// Initializes a new instance of the <see cref="Coordinates" /> struct.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -20,6 +35,22 @@ public readonly partial struct Coordinates : IEquatable<Coordinates>
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="Coordinates" /> struct.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="world">The world name.</param>
|
||||||
|
/// <param name="x">The X coordinate.</param>
|
||||||
|
/// <param name="y">The Y coordinate.</param>
|
||||||
|
/// <param name="z">The Z coordinate.</param>
|
||||||
|
/// <param name="yaw">The yaw.</param>
|
||||||
|
/// <param name="isRelative">
|
||||||
|
/// <see langword="true" /> if these coordinates represent relative coordinates; <see langword="false" /> otherwise.
|
||||||
|
/// </param>
|
||||||
|
public Coordinates(string? world, double x, double y, double z, Heading yaw, bool isRelative = false)
|
||||||
|
: this(world, x, y, z, yaw.ToHeading(), isRelative)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="Coordinates" /> struct.
|
/// Initializes a new instance of the <see cref="Coordinates" /> struct.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -41,6 +72,16 @@ public readonly partial struct Coordinates : IEquatable<Coordinates>
|
|||||||
IsRelative = isRelative;
|
IsRelative = isRelative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or initializes the heading.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The heading.</value>
|
||||||
|
public Heading Heading
|
||||||
|
{
|
||||||
|
get => Yaw.ToHeading();
|
||||||
|
init => Yaw = value.ToHeading();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or initializes a value indicating whether this instance represents relative coordinates.
|
/// Gets or initializes a value indicating whether this instance represents relative coordinates.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
59
VpSharp/src/Heading.cs
Normal file
59
VpSharp/src/Heading.cs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
// ReSharper disable InconsistentNaming
|
||||||
|
|
||||||
|
namespace VpSharp;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An enumeration of headings.
|
||||||
|
/// </summary>
|
||||||
|
public enum Heading
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// North.
|
||||||
|
/// </summary>
|
||||||
|
[Description("North")]
|
||||||
|
N,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Northeast.
|
||||||
|
/// </summary>
|
||||||
|
[Description("Northeast")]
|
||||||
|
NE,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// East.
|
||||||
|
/// </summary>
|
||||||
|
[Description("East")]
|
||||||
|
E,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Southeast.
|
||||||
|
/// </summary>
|
||||||
|
[Description("Southeast")]
|
||||||
|
SE,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// South.
|
||||||
|
/// </summary>
|
||||||
|
[Description("South")]
|
||||||
|
S,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Southwest.
|
||||||
|
/// </summary>
|
||||||
|
[Description("Southwest")]
|
||||||
|
SW,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// West.
|
||||||
|
/// </summary>
|
||||||
|
[Description("West")]
|
||||||
|
W,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Northwest.
|
||||||
|
/// </summary>
|
||||||
|
[Description("Northwest")]
|
||||||
|
NW
|
||||||
|
}
|
54
VpSharp/src/HeadingExtensions.cs
Normal file
54
VpSharp/src/HeadingExtensions.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
namespace VpSharp;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Extension methods to convert to/from <see cref="Heading" /> and <see cref="float" />.
|
||||||
|
/// </summary>
|
||||||
|
public static class HeadingExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a <see cref="Heading" /> to an angle representing the heading.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="heading">The heading to convert.</param>
|
||||||
|
/// <returns>A value from <see cref="Heading" />.</returns>
|
||||||
|
public static Heading ToHeading(this double heading)
|
||||||
|
{
|
||||||
|
heading %= 360;
|
||||||
|
if (heading < 0)
|
||||||
|
{
|
||||||
|
heading += 360;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((int)heading / 45) switch
|
||||||
|
{
|
||||||
|
1 => Heading.NE,
|
||||||
|
2 => Heading.E,
|
||||||
|
3 => Heading.SE,
|
||||||
|
4 => Heading.S,
|
||||||
|
5 => Heading.SW,
|
||||||
|
6 => Heading.W,
|
||||||
|
7 => Heading.NW,
|
||||||
|
_ => Heading.N
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a <see cref="Heading" /> to an angle representing the heading.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">The heading to convert.</param>
|
||||||
|
/// <returns>The heading, in degrees.</returns>
|
||||||
|
public static double ToHeading(this Heading direction)
|
||||||
|
{
|
||||||
|
return direction switch
|
||||||
|
{
|
||||||
|
Heading.N => 0,
|
||||||
|
Heading.NE => 45,
|
||||||
|
Heading.E => 90,
|
||||||
|
Heading.SE => 135,
|
||||||
|
Heading.S => 180,
|
||||||
|
Heading.SW => 225,
|
||||||
|
Heading.W => 270,
|
||||||
|
Heading.NW => 315,
|
||||||
|
_ => 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user