134 lines
2.9 KiB
C#
134 lines
2.9 KiB
C#
using System;
|
|
using Unity.Mathematics;
|
|
using UnityEngine;
|
|
|
|
namespace DanieleMarotta.RiversongCodeShowcase
|
|
{
|
|
public enum Directions
|
|
{
|
|
North,
|
|
|
|
NorthWest,
|
|
|
|
West,
|
|
|
|
SouthWest,
|
|
|
|
South,
|
|
|
|
SouthEast,
|
|
|
|
East,
|
|
|
|
NorthEast
|
|
}
|
|
|
|
public enum DirectionsMask4
|
|
{
|
|
None = 0,
|
|
|
|
North = 1 << 0,
|
|
|
|
West = 1 << 1,
|
|
|
|
South = 1 << 2,
|
|
|
|
East = 1 << 3
|
|
}
|
|
|
|
[Flags]
|
|
public enum DirectionsMask8
|
|
{
|
|
None = 0,
|
|
|
|
North = 1 << 0,
|
|
|
|
NorthWest = 1 << 1,
|
|
|
|
West = 1 << 2,
|
|
|
|
SouthWest = 1 << 3,
|
|
|
|
South = 1 << 4,
|
|
|
|
SouthEast = 1 << 5,
|
|
|
|
East = 1 << 6,
|
|
|
|
NorthEast = 1 << 7
|
|
}
|
|
|
|
public static class DirectionsExtensions
|
|
{
|
|
public static int2 ToVector(this Directions direction)
|
|
{
|
|
switch (direction)
|
|
{
|
|
case Directions.North:
|
|
return new int2(0, 1);
|
|
|
|
case Directions.NorthWest:
|
|
return new int2(-1, 1);
|
|
|
|
case Directions.West:
|
|
return new int2(-1, 0);
|
|
|
|
case Directions.SouthWest:
|
|
return new int2(-1, -1);
|
|
|
|
case Directions.South:
|
|
return new int2(0, -1);
|
|
|
|
case Directions.SouthEast:
|
|
return new int2(1, -1);
|
|
|
|
case Directions.East:
|
|
return new int2(1, 0);
|
|
|
|
case Directions.NorthEast:
|
|
return new int2(1, 1);
|
|
|
|
default:
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
}
|
|
|
|
public static Quaternion ToQuaternion(this Directions direction)
|
|
{
|
|
switch (direction)
|
|
{
|
|
case Directions.North:
|
|
return Quaternion.identity;
|
|
|
|
case Directions.NorthWest:
|
|
return Quaternion.LookRotation(new Vector3(-1, 0, 1));
|
|
|
|
case Directions.West:
|
|
return Quaternion.LookRotation(Vector3.left);
|
|
|
|
case Directions.SouthWest:
|
|
return Quaternion.LookRotation(new Vector3(-1, 0, -1));
|
|
|
|
case Directions.South:
|
|
return Quaternion.LookRotation(Vector3.back);
|
|
|
|
case Directions.SouthEast:
|
|
return Quaternion.LookRotation(new Vector3(1, 0, -1));
|
|
|
|
case Directions.East:
|
|
return Quaternion.LookRotation(Vector3.right);
|
|
|
|
case Directions.NorthEast:
|
|
return Quaternion.LookRotation(new Vector3(1, 0, 1));
|
|
|
|
default:
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
}
|
|
|
|
public static int2 Rotate(this Directions direction, int2 v)
|
|
{
|
|
return TileMath.Rotate(v, direction);
|
|
}
|
|
}
|
|
} |