示例#1
0
    void CheckConnectivity()
    {
        // remove any points that are not connected to root node
        Queue <GameObject> toVisit       = new Queue <GameObject>();
        List <GameObject>  removedPoints = new List <GameObject>();

        // establish connectivity
        toVisit.Enqueue(firstPoint);
        while (toVisit.Count > 0)
        {
            GridPoint p = toVisit.Dequeue().GetComponent <GridPoint>();
            p.Connect();
            if (p.forwardGameObject != null && !p.forwardGameObject.GetComponent <GridPoint>().Connected)
            {
                toVisit.Enqueue(p.forwardGameObject);
            }
            if (p.backGameObject != null && !p.backGameObject.GetComponent <GridPoint>().Connected)
            {
                toVisit.Enqueue(p.backGameObject);
            }
            if (p.leftGameObject != null && !p.leftGameObject.GetComponent <GridPoint>().Connected)
            {
                toVisit.Enqueue(p.leftGameObject);
            }
            if (p.rightGameObject != null && !p.rightGameObject.GetComponent <GridPoint>().Connected)
            {
                toVisit.Enqueue(p.rightGameObject);
            }
        }

        // check connectivity, adding points that are not connected to the list to be removed
        foreach (GameObject p in points)
        {
            if (!p.GetComponent <GridPoint>().CheckConnectivity())
            {
                removedPoints.Add(p);
            }
        }

        // remove points from main points list
        foreach (GameObject p in removedPoints)
        {
            points.Remove(p);
        }
    }