void CreateRooms() { int maximumRoomsNumber = (row / 10) * (column / 10); if (maximumRoomsNumber == 0) { return; } rooms = new List <TileMap_Room>(); int failureCount = 0; int minimumRoomWidth = row / 10 * 2; int maximumRoomWidth = row / 10 * 3; int minimumRoomHeight = column / 10 * 2; int maximumRoomHeight = column / 10 * 3; while (true) { int roomWidth = Random.Range(minimumRoomWidth, maximumRoomWidth); int roomHeight = Random.Range(minimumRoomHeight, maximumRoomHeight); int roomLeft = Random.Range(1, row - 1 - maximumRoomWidth); int roomBottom = Random.Range(1, column - 1 - maximumRoomHeight); TileMap_Room newRoom = new TileMap_Room(roomLeft, roomBottom, roomWidth, roomHeight); bool roomsOverlapping = false; for (int i = 0; i < rooms.Count; i++) { if (rooms.Count <= 0) { break; } roomsOverlapping = newRoom.Overlapping(rooms[i]); if (roomsOverlapping == true) { break; } } if (roomsOverlapping == true) { failureCount++; } else { rooms.Add(newRoom); } if ((rooms.Count >= maximumRoomsNumber) || (failureCount >= maximumRoomsNumber * 2)) { break; } } SetupRooms(); }
public bool Overlapping(TileMap_Room otherRoom) { if (left > otherRoom.right + 2) { return(false); } if (right < otherRoom.left - 2) { return(false); } if (bottom > otherRoom.top + 2) { return(false); } if (top < otherRoom.bottom - 2) { return(false); } return(true); }