Ejemplo n.º 1
0
        private IEnumerator SeperateRooms()
        {
            List <Collider> colliders = new List <Collider>();

            for (int i = 0; i < dungeonParent.transform.childCount; i++)
            {
                colliders.Add(dungeonParent.transform.GetChild(i).GetComponent <Collider>());
            }
            bool seperationComplete = false;

            while (!seperationComplete)
            {
                seperationComplete = true;
                IComparer roomSorter = new RoomSorter();
                foreach (Collider col in colliders)
                {
                    Collider[] intersectingColliders = Physics.OverlapBox(col.transform.position, new Vector3(col.transform.localScale.x / 2f, 1f, col.transform.localScale.z / 2f));
                    Array.Sort(intersectingColliders, roomSorter);
                    if (intersectingColliders.Length > 1)
                    {
                        seperationComplete = false;
                        foreach (Collider c in intersectingColliders)
                        {
                            if (col != c)
                            {
                                Vector3 directionToMove = col.transform.position - c.transform.position;
                                directionToMove.Normalize();
                                col.transform.position = new Vector3(col.transform.position.x + (directionToMove.x), 0f, col.transform.position.z + (directionToMove.z));
                            }
                        }
                        col.GetComponent <Room>().isSnappedToGrid = true;
                        DungeonUtilities.SnapBoundsToGrid(col.transform);
                    }
                    else if (!col.GetComponent <Room>().isSnappedToGrid)
                    {
                        col.GetComponent <Room>().isSnappedToGrid = true;
                        DungeonUtilities.SnapBoundsToGrid(col.transform);
                    }
                }
            }
            SnapRoomsToPositiveXZ();
            roomGenerationComplete = true;
            yield return(null);
        }