예제 #1
0
        public static (int x, int y) Offset(this CardinalDir cardinal)
        {
            int x = 0;
            int y = 0;

            if (cardinal.HasFlag(CardinalDir.NORTH))
            {
                y += 1;
            }
            if (cardinal.HasFlag(CardinalDir.EAST))
            {
                x += 1;
            }
            if (cardinal.HasFlag(CardinalDir.SOUTH))
            {
                y -= 1;
            }
            if (cardinal.HasFlag(CardinalDir.WEST))
            {
                x -= 1;
            }
            return(x, y);
        }
예제 #2
0
        private static CardinalDir Rotate(this CardinalDir cardinal, int diff)
        {
            CardinalDir rotated = 0;

            for (int i = 0; i < cardinalDirs.Length; i++)
            {
                if (cardinal.HasFlag(cardinalDirs[i]))
                {
                    int newDir = i + diff;
                    if (newDir >= cardinalDirs.Length)
                    {
                        newDir = 0;
                    }
                    if (newDir < 0)
                    {
                        newDir = cardinalDirs.Length - 1;
                    }
                    rotated |= cardinalDirs[newDir];
                }
            }
            return(rotated);
        }