private Corridor generateCorridor(CardinalPoint mapDirection, Room lastRoom, IntInRangePicker corrLengthPicker, IntInRangePicker corrWidthPicker, CellInRangePicker cellRangePicker) { int corridorLenght = corrLengthPicker.draw(); int corridorSection = corrWidthPicker.draw(); Corridor.Orientation corrOrient = 0; Grid grid = null; Cell topLeftCell = lastRoom.topLeftVertex(); if (mapDirection == CardinalPoint.NORD) { grid = new Grid(corridorLenght, corridorSection); corrOrient = Corridor.Orientation.vertical; Cell topLeftVertexMin = lastRoom.topLeftVertex().minusSize(corridorLenght, 0); Cell topLeftVertexMax = topLeftVertexMin.plusCell(0, lastRoom.width() - corridorSection); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(0, 1); Cell excludeTwo = topLeftVertexMax.minusCell(0, 1); topLeftCell = cellRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } else if (mapDirection == CardinalPoint.EST) { grid = new Grid(corridorSection, corridorLenght); corrOrient = Corridor.Orientation.horizontal; Cell topLeftVertexMin = lastRoom.topRightVertex(); Cell topLeftVertexMax = topLeftVertexMin.plusCell(lastRoom.height() - corridorSection, 0); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(1, 0); Cell excludeTwo = topLeftVertexMax.minusCell(1, 0); topLeftCell = cellRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } else if (mapDirection == CardinalPoint.SUD) { grid = new Grid(corridorLenght, corridorSection); corrOrient = Corridor.Orientation.vertical; Cell topLeftVertexMin = lastRoom.bottomLeftVertex(); Cell topLeftVertexMax = topLeftVertexMin.plusCell(0, lastRoom.width() - corridorSection); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(0, 1); Cell excludeTwo = topLeftVertexMax.minusCell(0, 1); topLeftCell = cellRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } else if (mapDirection == CardinalPoint.WEST) { grid = new Grid(corridorSection, corridorLenght); corrOrient = Corridor.Orientation.horizontal; Cell topLeftVertexMin = lastRoom.topLeftVertex().minusSize(0, corridorLenght); Cell topLeftVertexMax = topLeftVertexMin.plusCell(lastRoom.height() - corridorSection, 0); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(1, 0); Cell excludeTwo = topLeftVertexMax.minusCell(1, 0); topLeftCell = cellRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } return(new Corridor(topLeftCell, grid, corrOrient)); }
private Room generateRoom(CardinalPoint lastCorridorDirection, Corridor lastCorr, IntInRangePicker roomSizePicker, CellInRangePicker cellInRangePicker) { int roomRows = roomSizePicker.draw(); int roomCols = roomSizePicker.draw(); Grid grid = new Grid(roomRows, roomCols); Cell topLeftCell = null; if (lastCorridorDirection == CardinalPoint.NORD) { Cell topLeftVertexMax = lastCorr.topLeftVertex().minusSize(roomRows, 0); Cell topLeftVertexMin = topLeftVertexMax.minusCell(0, roomCols - lastCorr.width()); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(0, 1); Cell excludeTwo = topLeftVertexMax.minusCell(0, 1); topLeftCell = cellInRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } else if (lastCorridorDirection == CardinalPoint.EST) { Cell topLeftVertexMax = lastCorr.topRightVertex(); Cell topLeftVertexMin = topLeftVertexMax.minusCell(roomRows - lastCorr.height(), 0); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(1, 0); Cell excludeTwo = topLeftVertexMax.minusCell(1, 0); topLeftCell = cellInRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } else if (lastCorridorDirection == CardinalPoint.SUD) { Cell topLeftVertexMax = lastCorr.bottomLeftVertex(); Cell topLeftVertexMin = topLeftVertexMax.minusCell(0, roomCols - lastCorr.width()); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(0, 1); Cell excludeTwo = topLeftVertexMax.minusCell(0, 1); topLeftCell = cellInRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } else if (lastCorridorDirection == CardinalPoint.WEST) { Cell topLeftVertexMax = lastCorr.topLeftVertex().minusSize(0, roomCols); Cell topLeftVertexMin = topLeftVertexMax.minusCell(roomRows - lastCorr.height(), 0); //Excluding cells to avoid Inward and Outward Corner Walls Overlapping Cell excludeOne = topLeftVertexMin.plusCell(1, 0); Cell excludeTwo = topLeftVertexMax.minusCell(1, 0); topLeftCell = cellInRangePicker.drawBetweenWithExclusion(topLeftVertexMin, topLeftVertexMax, excludeOne, excludeTwo); _logger.info("Min: " + topLeftVertexMin + " Max: " + topLeftVertexMax + " Selected: " + topLeftCell + " Exclusions: " + excludeOne + " - " + excludeTwo); } return(new Room(topLeftCell, grid)); }