Beispiel #1
0
    void ConnectRooms()
    {
        LinkedList <RoomNode> newCorridors  = new LinkedList <RoomNode> ();
        LinkedList <RoomNode> existingRooms = new LinkedList <RoomNode> ();

        Util.LLAppend <RoomNode> (existingRooms, roomNodeList);
        foreach (RoomNode roomA in roomNodeList)
        {
            foreach (RoomNode roomB in roomNodeList)
            {
                if (roomA != roomB && !roomA.connections.Contains(roomB))
                {
                    Vector3 touchDir = RoomNode.CheckRoomTouch(roomA.octTreeNode.boundary, roomB.octTreeNode.boundary);
                    if (touchDir != Vector3.zero && ((Random.Range(0, 100) < 50) || !roomA.ConnectsTo(roomB)))
                    {
                        RoomNode.MakeConnections(roomA, roomB);
                        foreach (RoomNode c in ConnectTwoRooms(roomA, roomB, existingRooms))
                        {
                            newCorridors.AddFirst(c);
                            existingRooms.AddFirst(c);
                        }
                    }
                }
            }
        }

        foreach (RoomNode c in newCorridors)
        {
            roomNodeList.AddFirst(c);
        }
    }
Beispiel #2
0
 void ConnectMulti()
 {
     foreach (RoomGenerator a in roomGens)
     {
         foreach (RoomNode roomA in a.roomNodeList)
         {
             foreach (RoomGenerator b in roomGens)
             {
                 if (a != b)
                 {
                     foreach (RoomNode roomB in b.roomNodeList)
                     {
                         if (!roomA.isCorridor && !roomB.isCorridor && !roomA.connections.Contains(roomB))
                         {
                             Vector3 touchDir = RoomNode.CheckRoomTouch(roomA.octTreeNode.boundary, roomB.octTreeNode.boundary);
                             if (touchDir != Vector3.zero && ((Random.Range(0, 100) < 33) || !roomA.ConnectsTo(roomB)))
                             {
                                 RoomNode.MakeConnections(roomA, roomB);
                                 foreach (RoomNode c in a.BuildCorridors(roomA, roomB, Vector3.zero, allRooms))
                                 {
                                     interCorridors.AddFirst(c);
                                     allRooms.AddFirst(c);
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }