Beispiel #1
0
    /// <summary>
    ///     Get the direction as a <see cref="Vector2"/>
    /// </summary>
    /// <param name="dir"></param>
    /// <returns></returns>
    public static Vector2 ToVector2(this EDirection8 dir)
    {
        switch (dir)
        {
        case EDirection8.None:
            return(Vector2.zero);

        case EDirection8.Up:
            return(Vector2.up);

        case EDirection8.UpRight:
            return(Vector2.up + Vector2.right);

        case EDirection8.Right:
            return(Vector2.right);

        case EDirection8.DownRight:
            return(Vector2.down + Vector2.right);

        case EDirection8.Down:
            return(Vector2.down);

        case EDirection8.DownLeft:
            return(Vector2.down + Vector2.left);

        case EDirection8.Left:
            return(Vector2.left);

        case EDirection8.UpLeft:
            return(Vector2.up + Vector2.left);

        default:
            throw new ArgumentOutOfRangeException("dir", dir, null);
        }
    }
Beispiel #2
0
    /// <summary>
    ///     Converts a <see cref="EDirection8"/> to a <see cref="EDirection2"/>.
    /// </summary>
    /// <param name="dir8"></param>
    /// <returns></returns>
    public static EDirection2 To2(this EDirection8 dir8)
    {
        switch (dir8)
        {
        case EDirection8.None:
            return(EDirection2.None);

        case EDirection8.Up:
        case EDirection8.Down:
            return(EDirection2.Vertical);

        case EDirection8.Right:
        case EDirection8.Left:
            return(EDirection2.Horizontal);

        case EDirection8.DownRight:
        case EDirection8.DownLeft:
        case EDirection8.UpLeft:
        case EDirection8.UpRight:
            throw new InvalidEnumArgumentException("Direction cannot be diagonal");

        default:
            throw new ArgumentOutOfRangeException("dir8", dir8, null);
        }
    }
Beispiel #3
0
 /// <summary>
 ///     Get the opposite <see cref="EDirection8"/> of the given value
 /// </summary>
 /// <param name="dir"></param>
 /// <returns></returns>
 public static EDirection8 Opposite(this EDirection8 dir)
 {
     if (dir == EDirection8.None)
     {
         return(EDirection8.None);
     }
     return((EDirection8)(((int)dir + 3) % (dir.Count() - 1) + 1));
 }
Beispiel #4
0
 /// <summary>
 ///     Converts an <see cref="EDirection8"/> to <see cref="EDirection4"/>. Throws an exception if given value is diagonal.
 /// </summary>
 /// <param name="dir8"></param>
 /// <returns></returns>
 public static EDirection4 To4(this EDirection8 dir8)
 {
     if (dir8 == EDirection8.None)
     {
         return(EDirection4.None);
     }
     if (((int)dir8).IsEven())
     {
         throw new InvalidEnumArgumentException("dir8", (int)dir8, dir8.GetType());
     }
     return((EDirection4)(((int)dir8 + 1) / 2));
 }
Beispiel #5
0
 /// <summary>
 ///     Check to see if both <see cref="EDirection8s"/> are opposite to each other
 /// </summary>
 /// <param name="lhs"></param>
 /// <param name="rhs"></param>
 /// <returns>True if opposite</returns>
 public static bool IsOpposite(this EDirection8 lhs, EDirection8 rhs)
 {
     return(lhs != EDirection8.None && rhs != EDirection8.None && Math.Abs((int)lhs - (int)rhs) == 4);
 }