private CORRIDOR_DIRECTION RandomDirectionBasedOnPreviousRoom(CORRIDOR_DIRECTION previousRoomDirection) { if (previousRoomDirection == CORRIDOR_DIRECTION.NORTH) { previousRoomDirection = CORRIDOR_DIRECTION.SOUTH; } else if (previousRoomDirection == CORRIDOR_DIRECTION.EAST) { previousRoomDirection = CORRIDOR_DIRECTION.WEST; } else if (previousRoomDirection == CORRIDOR_DIRECTION.SOUTH) { previousRoomDirection = CORRIDOR_DIRECTION.NORTH; } else if (previousRoomDirection == CORRIDOR_DIRECTION.WEST) { previousRoomDirection = CORRIDOR_DIRECTION.EAST; } CORRIDOR_DIRECTION nextRoomDirection; do { nextRoomDirection = RandomDirection(); }while(nextRoomDirection == previousRoomDirection); return(nextRoomDirection); }
void CalculateNextRoomOffsetPosition(CORRIDOR_DIRECTION previousRoomDirection, int roomWidth, int roomHeight) { if (previousRoomDirection == CORRIDOR_DIRECTION.NORTH) { nextRoomOffset += new Vector3(0f, roomWidth * 0.64f, 0f); } else if (previousRoomDirection == CORRIDOR_DIRECTION.EAST) { nextRoomOffset += new Vector3(roomWidth * 0.64f, 0f, 0f); } else if (previousRoomDirection == CORRIDOR_DIRECTION.SOUTH) { nextRoomOffset += new Vector3(0f, -roomHeight * 0.64f, 0f); } else if (previousRoomDirection == CORRIDOR_DIRECTION.WEST) { nextRoomOffset += new Vector3(-roomWidth * 0.64f, 0f, 0f); } Debug.Log("previousRoomDirection : " + previousRoomDirection + " nextRoomOffset : " + nextRoomOffset); }
//Instantiates the outer walls and floor void BoardSetup() { boardHolder = new GameObject("Board").transform; int tempNumberOfRooms = numOfRooms.Random; CORRIDOR_DIRECTION previousRoomDirection = CORRIDOR_DIRECTION.TOTAL; do { int widthOfRoom = roomWidth.Random; int heightOfRoom = roomHeight.Random; CORRIDOR_DIRECTION[] corridorDirection = new CORRIDOR_DIRECTION[4]; int corridorsToSpawn = noOfCorridors.Random; Debug.Log(corridorsToSpawn); Transform roomHolder = new GameObject("Room " + tempNumberOfRooms).transform; roomHolder.transform.SetParent(boardHolder); //nextRoomOffset += new Vector3 (-widthOfRoom/2 * 0.64f, -heightOfRoom/2 * 0.64f, 0f); for (int i = 0; i < corridorsToSpawn; i++) { if (previousRoomDirection == CORRIDOR_DIRECTION.TOTAL) { corridorDirection [i] = RandomDirection(); Debug.Log(corridorDirection [i]); } else { corridorDirection [i] = RandomDirectionBasedOnPreviousRoom(previousRoomDirection); Debug.Log(corridorDirection [i]); } } for (int x = -1; x < widthOfRoom + 1; x++) { for (int y = -1; y < heightOfRoom + 1; y++) { GameObject toInstantiate = floorTiles [Random.Range(0, floorTiles.Length)]; //Outer walls if (y == heightOfRoom) { toInstantiate = outerWallTiles [0]; } if (y == -1) { toInstantiate = outerWallTiles [1]; } if (x == -1) { toInstantiate = outerWallTiles [2]; } if (x == widthOfRoom) { toInstantiate = outerWallTiles [3]; } if (x == -1 && y == -1) { toInstantiate = outerWallTiles [6]; } if (x == widthOfRoom && y == -1) { toInstantiate = outerWallTiles [7]; } if (x == -1 && y == heightOfRoom) { toInstantiate = outerWallTiles [4]; } if (x == widthOfRoom && y == heightOfRoom) { toInstantiate = outerWallTiles [5]; } GameObject instance = Instantiate(toInstantiate, new Vector3(nextRoomOffset.x + x * 0.64f, nextRoomOffset.y + y * 0.64f, 0f), Quaternion.identity) as GameObject; //Setting the hierarchy for neatness instance.transform.SetParent(roomHolder); } } if (previousRoomDirection == CORRIDOR_DIRECTION.TOTAL) { spawnPoint = new Vector3(widthOfRoom / 2 * 0.64f, heightOfRoom / 2 * 0.64f, 0f); } //! HAXXXXX previousRoomDirection = corridorDirection[0]; CalculateNextRoomOffsetPosition(previousRoomDirection, roomWidth.Max, roomHeight.Max); tempNumberOfRooms--; } while(tempNumberOfRooms > 0); }