// Use this for initialization
    void Start()
    {
        mainRooms = new List <LegacyRoom>();
        floor.transform.localScale *= tileSize;
        // Check if we're going to cut the map horizontal or vertically.
        bool  horizontalCut = Random.Range(0, 100) < 50;
        float sizeFirstRoom;
        int   firstRoomDivision = (int)Random.Range(roomNumber * 0.4f, roomNumber * 0.6f);

        if (horizontalCut)
        {
            sizeFirstRoom = Random.Range(mapSize.y * 0.4f, mapSize.y * 0.6f);
            LegacyRoom room = new LegacyRoom(new Vector3(0, 0, 0), new Vector3(mapSize.x, generationMode == MapGenerationMode.TwoD ? sizeFirstRoom : 0, generationMode == MapGenerationMode.ThreeD ? sizeFirstRoom : 0), firstRoomDivision, roomPercentage, "0");
            mainRooms.Add(room);
            room = new LegacyRoom(new Vector3(0, generationMode == MapGenerationMode.TwoD ? sizeFirstRoom : 0, generationMode == MapGenerationMode.ThreeD ? sizeFirstRoom : 0),
                                  new Vector3(mapSize.x, generationMode == MapGenerationMode.TwoD ? mapSize.y - sizeFirstRoom : 0, generationMode == MapGenerationMode.ThreeD ? mapSize.y - sizeFirstRoom : 0), roomNumber - firstRoomDivision, roomPercentage, "1");
            mainRooms.Add(room);
        }
        else
        {
            sizeFirstRoom = Random.Range(mapSize.x * 0.4f, mapSize.x * 0.6f);
            LegacyRoom room = new LegacyRoom(new Vector3(0, 0, 0), new Vector3(sizeFirstRoom, generationMode == MapGenerationMode.TwoD ? mapSize.y : 0, generationMode == MapGenerationMode.ThreeD ? mapSize.y : 0), firstRoomDivision, roomPercentage, "0");
            mainRooms.Add(room);
            room = new LegacyRoom(new Vector3(sizeFirstRoom, 0, 0), new Vector3(mapSize.x - sizeFirstRoom, generationMode == MapGenerationMode.TwoD ? mapSize.y : 0, generationMode == MapGenerationMode.ThreeD ? mapSize.y : 0), roomNumber - firstRoomDivision, roomPercentage, "1");
            mainRooms.Add(room);
        }
    }
Exemple #2
0
    public LegacyRoom(Vector3 startPoint, Vector3 roomSize, int roomDivisions, float roomPercentage, string previousGeneration = "")
    {
        this.startPoint       = startPoint;
        this.roomSize         = roomSize;
        this.numberOfRooms    = roomDivisions;
        this.roomPercentage   = roomPercentage;
        this.generationString = previousGeneration;
        if (this.numberOfRooms == 1)
        {
            this.startPoint = this.startPoint * (1 + (1 - roomPercentage));
            this.roomSize   = this.roomSize * roomPercentage;
        }
        else if (this.numberOfRooms > 1)
        {
            this.subRooms = new List <LegacyRoom>();
            bool twoD = this.roomSize.z == 0;

            //Re-escalate the room for lesser size.
            Vector3 trueStartPoint = new Vector3(this.startPoint.x + 15, twoD ? this.startPoint.y + 15 : 0, twoD ? 0 : this.startPoint.z + 15);
            Vector3 trueRoomSize   = new Vector3(this.roomSize.x - 15, twoD ? this.roomSize.y - 15 : 0, twoD?0:this.roomSize.z - 15); //* this.roomPercentage;

            bool horizontal = Random.Range(0, 100) < 50;
            int  firstRooms;
            if (numberOfRooms > 2)
            {
                firstRooms = (int)Random.Range(this.numberOfRooms * 0.4f, this.numberOfRooms * 0.6f);
            }
            else
            {
                firstRooms = 1;
            }
            float sizeFirstRoom;
            if (horizontal)
            {
                sizeFirstRoom = twoD ? trueRoomSize.y : trueRoomSize.z;
                sizeFirstRoom = Random.Range(sizeFirstRoom * 0.4f, sizeFirstRoom * 0.6f);
                LegacyRoom room = new LegacyRoom(trueStartPoint, new Vector3(trueRoomSize.x, twoD ? sizeFirstRoom : 0, twoD ? 0 : sizeFirstRoom), firstRooms, roomPercentage, this.generationString + "0");
                this.subRooms.Add(room);
                if ((this.numberOfRooms - firstRooms) != 0)
                {
                    room = new LegacyRoom(trueStartPoint + (twoD ? Vector3.up * (sizeFirstRoom): Vector3.forward * (sizeFirstRoom)),
                                          new Vector3(trueRoomSize.x, twoD ? trueRoomSize.y - sizeFirstRoom : 0, twoD ? 0 : trueRoomSize.z - sizeFirstRoom), this.numberOfRooms - firstRooms, roomPercentage, this.generationString + "1");
                    this.subRooms.Add(room);
                }
            }
            else
            {
                sizeFirstRoom = Random.Range(trueRoomSize.x * 0.4f, trueRoomSize.x * 0.6f);
                LegacyRoom room = new LegacyRoom(trueStartPoint, new Vector3(sizeFirstRoom, twoD ? trueRoomSize.y : 0, twoD ? 0 : trueRoomSize.z), firstRooms, roomPercentage, this.generationString + "0");
                this.subRooms.Add(room);
                if ((this.numberOfRooms - firstRooms) != 0)
                {
                    room = new LegacyRoom(trueStartPoint + Vector3.right * (sizeFirstRoom),
                                          new Vector3(trueRoomSize.x - sizeFirstRoom, twoD ? trueRoomSize.y : 0, twoD ? 0 : trueRoomSize.z), this.numberOfRooms - firstRooms, roomPercentage, this.generationString + "1");
                    this.subRooms.Add(room);
                }
            }
        }
    }
    private Vector3[] GenerateCorridor(int n1, int n2 = -1)
    {
        Vector3[]  road  = null;
        LegacyRoom room1 = allRooms[n1];
        LegacyRoom room2;
        //First, we need to see if the rooms can have a road to create.
        //Check if is left.
        Vector3 startPoint = room1.StartPoint;

        if (generationMode == MapGenerationMode.ThreeD)
        {
            RaycastHit hit;
            startPoint = new Vector3(startPoint.x, 0.5f, startPoint.z);
            for (float z = 0; z <= room1.RoomSize.z; z += room1.RoomSize.z * 0.1f)
            {
                startPoint = new Vector3(startPoint.x, 0.5f, room1.StartPoint.z + z);
                Physics.Raycast(startPoint - Vector3.left, Vector3.left, out hit);

                if (hit.collider != null && hit.collider.gameObject != null)
                {
                    int num;
                    if (!int.TryParse(hit.collider.gameObject.name, out num))
                    {
                        break;
                    }

                    room2 = allRooms[(num)];
                    if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(x => x == room2) == null)
                    {
                        print("room: " + n1 + " room2: " + n2 + "   :    " + hit.collider.gameObject.name + "  left");
                        roomsConected.Add(room2);
                        road    = new Vector3[2];
                        road[0] = startPoint;
                        road[1] = hit.point;
                        room1.NumberCorridors += 1;
                        room2.NumberCorridors += 1;
                        return(road);
                    }
                }
            }

            //Check if is right
            startPoint = new Vector3(room1.StartPoint.x + room1.RoomSize.x, 0.5f, room1.StartPoint.z);
            for (float z = 0; z <= room1.RoomSize.z; z += room1.RoomSize.z * 0.1f)
            {
                startPoint = new Vector3(startPoint.x, 0.5f, room1.StartPoint.z + z);
                Physics.Raycast(startPoint + Vector3.right, Vector3.right, out hit);

                if (hit.collider != null && hit.collider.gameObject != null)
                {
                    int num;
                    if (!int.TryParse(hit.collider.gameObject.name, out num))
                    {
                        break;
                    }

                    room2 = allRooms[(num)];
                    if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(x => x == room2) == null)
                    {
                        roomsConected.Add(room2);

                        road    = new Vector3[2];
                        road[0] = startPoint;
                        road[1] = hit.point;
                        room1.NumberCorridors += 1;
                        room2.NumberCorridors += 1;
                        return(road);
                    }
                }
            }


            //Check if is down
            startPoint = new Vector3(room1.StartPoint.x, 0.5f, room1.StartPoint.z);

            for (float x = 0; x <= room1.RoomSize.x; x += room1.RoomSize.x * 0.1f)
            {
                startPoint = new Vector3(room1.StartPoint.x + x, 0.5f, startPoint.z);
                Physics.Raycast(startPoint - Vector3.forward, -Vector3.forward, out hit);
                if (hit.collider != null && hit.collider.gameObject != null)
                {
                    int num;
                    if (!int.TryParse(hit.collider.gameObject.name, out num))
                    {
                        break;
                    }

                    room2 = allRooms[(num)];
                    if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(z => z == room2) == null)
                    {
                        roomsConected.Add(room2);

                        road    = new Vector3[2];
                        road[0] = startPoint;
                        road[1] = hit.point;
                        room1.NumberCorridors += 1;
                        room2.NumberCorridors += 1;
                        return(road);
                    }
                }
            }

            //Check if is up
            startPoint = new Vector3(room1.StartPoint.x, 0.5f, room1.StartPoint.z + room1.RoomSize.z);

            for (float x = 0; x <= room1.RoomSize.x; x += room1.RoomSize.x * 0.1f)
            {
                startPoint = new Vector3(room1.StartPoint.x + x, 0.5f, startPoint.z);
                Physics.Raycast(startPoint + Vector3.forward, Vector3.forward, out hit);
                if (hit.collider != null && hit.collider.gameObject != null)
                {
                    int num;
                    if (!int.TryParse(hit.collider.gameObject.name, out num))
                    {
                        break;
                    }

                    room2 = allRooms[(num)];
                    if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(z => z == room2) == null)
                    {
                        roomsConected.Add(room2);

                        road    = new Vector3[2];
                        road[0] = startPoint;
                        road[1] = hit.point;
                        room1.NumberCorridors += 1;
                        room2.NumberCorridors += 1;
                        return(road);
                    }
                }
            }
        }



        return(road);
    }
Exemple #4
0
    public override bool Equals(object obj)
    {
        LegacyRoom aux = obj as LegacyRoom;

        return(aux != null && this.generationString == aux.generationString);
    }