예제 #1
0
  public static List<Room> generateRooms(Global.RoomSize size, MapLayout map) {
    ArrayList<Room> placedRooms = new ArrayList<>();
    int success = 0;
    int tPadding = Global.RoomUsePadding ? Global.RoomPadding : 0;
    int pSize = 0;
    int tAttempts = Global.RoomAttempts;
    while (tAttempts > 0) {
      Room room = createRandomRoom(map.getWidth(), map.getHeight(), size);
      Room paddedRoom =
          new Room(
              room.x - tPadding,
              room.y - tPadding,
              room.w + (2 * tPadding),
              room.h + (2 * tPadding));

      if (checkForEmptySpace(map, paddedRoom)) {
        placeRoom(map, room);
        success++;
        placedRooms.add(room);
        pSize++;
      }

      tAttempts--;
      if (size != Global.RoomSize.getValues().get(0) && pSize % Global.RoomMaxNumPlace == 0) {
        size = size.getSmaller();
      }
    }
    System.out.println("Successful Rooms: " + success);
    return placedRooms;
  }
예제 #2
0
 private static void placeRoom(MapLayout map, Room room) {
   for (int i = room.y; i < room.y + room.h; i++) {
     for (int j = room.x; j < room.x + room.w; j++) {
       map.activateGrid(new Grid(i, j));
     }
   }
 }
예제 #3
0
 private static boolean checkForEmptySpace(MapLayout map, Room room) {
   for (int y = room.y; y < room.y + room.h; y++) {
     for (int x = room.x; x < room.x + room.w; x++) {
       Grid g = map.getGrid(x, y);
       if (g == null || (Global.RoomUsePadding && g.active)) {
         return false;
       }
     }
   }
   return true;
 }
예제 #4
0
 /**
  * Check if the this Room can be placed on the map with the x,y coordinates
  *
  * @param map
  * @return
  */
 public boolean checkRectangleInBounds(MapLayout map) {
   return (y < map.getHeight() && (y + h) < map.getHeight())
       && (x < map.getWidth() && (x + w < map.getWidth()));
 }