private static void tryAddFeature(Level level, Location doorLoc, Feature feature) { Direction[] directions = { Direction.North, Direction.South, Direction.West, Direction.East }; foreach (Direction direction in directions) { Rect rect = createRect(doorLoc, direction, feature); rect.expand(); if (rectIsClear(level, rect)) { rect.compress(); if (feature == Feature.Room) { carveRoom(level, rect, false, TileType.Dungeon_Floor); } else if (feature == Feature.Corridor) { carveCorridor(level, rect, false, TileType.Dungeon_Floor); } level.addTile(new Tile(false, TileType.Dungeon_Floor), doorLoc); level.addWalkable(new Door(), doorLoc); break; } } }
private static void carveRoom(Level level, Rect rect, bool blocks, TileType tileType) { for (int x = rect.x1; x <= rect.x2; x++) { for (int y = rect.y1; y <= rect.y2; y++) { Tile tile = new Tile(blocks, tileType); level.addTile(tile, new Location(x, y)); } } }