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); } }
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); } } } } } } } } }