Esempio n. 1
0
        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);
            }
        }