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