private static bool CanConvertToWall(this RoomTiles tiles, Coordinate coordinate) { if (!tiles.IsInside(coordinate)) { return(false); } return(tiles[coordinate].IsNullOrEmpty()); }
internal Room(RoomBlocks blocks, DispatchRegistry registry, IRandomNumberGenerator randomNumbers, int tilesPerBlock) : base(Coordinate.NotSet, registry) { blocks.ThrowIfNull(nameof(blocks)); randomNumbers.ThrowIfNull(nameof(randomNumbers)); _randomNumbers = randomNumbers; Tiles = new RoomTiles(blocks.RowUpperBound, blocks.ColumnUpperBound, tilesPerBlock, Registry, _randomNumbers); }
public static Compass8Points DiscoverSurroundingSpace(this RoomTiles tiles, Coordinate coordinate) { var surroundingSpace = Compass8Points.Undefined; var below = CanConvertToWall(tiles, coordinate.Down()); if (below) { surroundingSpace |= Compass8Points.South; } var above = CanConvertToWall(tiles, coordinate.Up()); if (above) { surroundingSpace |= Compass8Points.North; } var right = CanConvertToWall(tiles, coordinate.Right()); if (right) { surroundingSpace |= Compass8Points.East; } var left = CanConvertToWall(tiles, coordinate.Left()); if (left) { surroundingSpace |= Compass8Points.West; } var topLeft = CanConvertToWall(tiles, coordinate.Up().Left()); if (topLeft) { surroundingSpace |= Compass8Points.NorthWest; } var topRight = CanConvertToWall(tiles, coordinate.Up().Right()); if (topRight) { surroundingSpace |= Compass8Points.NorthEast; } var bottomLeft = CanConvertToWall(tiles, coordinate.Down().Left()); if (bottomLeft) { surroundingSpace |= Compass8Points.SouthWest; } var bottomRight = CanConvertToWall(tiles, coordinate.Down().Right()); if (bottomRight) { surroundingSpace |= Compass8Points.SouthEast; } return(surroundingSpace); }
private RoomTiles(RoomTiles tiles) : base(tiles) { TilesPerBlock = tiles.TilesPerBlock; }
private Room(Room room) : base(room.Coordinates, room.Registry) { _randomNumbers = room._randomNumbers; Tiles = (RoomTiles)room.Tiles.Clone(); }