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); }
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); }