protected virtual void ConnectOverlappingDoorways(float percentageChance) { if (percentageChance <= 0) { return; } List <Doorway> processedDoorways = new List <Doorway>(allDoorways.Count); const float epsilon = 0.00001f; foreach (var a in allDoorways) { foreach (var b in allDoorways) { if (a == b) { continue; } if (a.Tile == b.Tile) { continue; } if (processedDoorways.Contains(b)) { continue; } if (!DoorwaySocket.IsMatchingSocket(a.SocketGroup, b.SocketGroup)) { continue; } float distanceSqrd = (a.transform.position - b.transform.position).sqrMagnitude; if (distanceSqrd < epsilon) { if (RandomStream.NextDouble() < percentageChance) { currentDungeon.MakeConnection(a, b, RandomStream); } } } processedDoorways.Add(a); } }