Beispiel #1
0
    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);
    }