public GameObject GenerateRoom(GameObject room, int _index, GameObject _forced = null) { int temp2 = 0; Transform[] _doors = room.GetComponent <RoomScript>().getDoors(); GameObject spawnedHall = null; //Generate a Hallway for (int temp = 0; temp < _doors.Length; temp++) { int i = Random.Range(0, hallways.Length); temp2 = Random.Range(0, _doors.Length); GameObject Hall = HallsHold[i]; RoomScript hallDoors = Hall.GetComponent <RoomScript>(); //Rotate Template Hall.transform.rotation = Quaternion.Euler(Hall.transform.rotation.x, RotationCalculator(_doors[temp2].transform.eulerAngles.y, hallDoors.getDoors()[0].eulerAngles.y), Hall.transform.rotation.z); //Position Template Hall.transform.position = _doors[temp2].transform.position + (Hall.transform.position - hallDoors.getDoors()[0].transform.position); if (CheckCollision(Hall, room)) { //Generate Hall spawnedHall = Instantiate(hallways[i], Hall.transform.position, Hall.transform.rotation); //Reset Remplate Hall.transform.position = transform.position; Hall.transform.rotation = transform.rotation; break; } else { //Reset Template Hall.transform.position = transform.position; Hall.transform.rotation = transform.rotation; } } if (spawnedHall == null) //If no hall return null { return(null); } //Generate Room for (int i = 0; i < rooms.Length; i++) { int roomTemp = Random.Range(0, rooms.Length); GameObject Room; if (_forced == null) { Room = RoomsHold[roomTemp]; } else { Room = _forced; } RoomScript roomDoors = Room.GetComponent <RoomScript>(); for (int j = 0; j < roomDoors.getDoors().Length; j++) { int jTemp = Random.Range(0, roomDoors.getDoors().Length); //Rotate Room Room.transform.rotation = Quaternion.Euler(new Vector3(Room.transform.rotation.x, RotationCalculator(spawnedHall.GetComponent <RoomScript>().getDoors()[1].eulerAngles.y , roomDoors.getDoors()[jTemp].transform.eulerAngles.y) , Room.transform.rotation.z)); //Position Room Room.transform.position = spawnedHall.GetComponent <RoomScript>().getDoors()[1].transform.position + (Room.transform.position - roomDoors.getDoors()[jTemp].transform.position); if (CheckCollision(Room, spawnedHall)) { GameObject spawned; //Generate Room if (_forced == null) { spawned = Instantiate(rooms[roomTemp], Room.transform.position, Room.transform.rotation); } else { spawned = _forced; } spawned.GetComponent <RoomScript>().setDoor(jTemp); //Set ActiveDoor room.GetComponent <RoomScript>().setDoor(temp2); GeneratedHalls[_index] = spawnedHall; //Reset Template if (_forced == null) { Room.transform.position = transform.position; Room.transform.rotation = transform.rotation; } return(spawned); } Room.transform.rotation = transform.rotation; Room.transform.position = transform.position; } Room.transform.rotation = transform.rotation; Room.transform.position = transform.position; } Destroy(spawnedHall); return(null); }