private List<Direction> GetAdjacencies(bool cardinal) { //Are we getting adjacencies for cardinal or diagonal directions? List<int> directionIndexes = cardinal ? TileHelper.CardinalDirections().Select(direction => (int)direction).ToList() : TileHelper.DiagonalDirections().Select(direction => (int)direction).ToList(); //Loop through each index in direction indexes, pick those that exist and cast them to the Direction enum. return (from index in directionIndexes where connections[index].Exists select (Direction) index).ToList(); }
/** * Get the direction of the only cardinal/diagonal non connection. * Assumes there is exactly one cardinal/diagonal non connection */ public Direction GetSingleNonConnection(bool cardinal = true) { List<Direction> foundConnections = GetAdjacencies(cardinal); List<Direction> directions = cardinal ? TileHelper.CardinalDirections() : TileHelper.DiagonalDirections(); List<Direction> missingConnections = directions.Where(direction => !foundConnections.Contains(direction)).ToList(); return missingConnections[0]; }