private IEnumerator UpdateGraphRoutine(NavMeshGraph graph)
    {
        updateInProgress = true;

        pathing.AddWorkItem(() =>
        {
            UnstitchFromNeighbors(graph);
        });

        pathing.FlushWorkItems();
        while (pathing.IsAnyWorkItemInProgress)
        {
            yield return(null);
        }

        if (toRemove.Contains(graph))
        {
            pathing.data.RemoveGraph(graph);


            toRemove.Remove(graph);
        }

        else
        {
            while (pathing.isScanning)
            {
                yield return(null);
            }
            pathing.Scan(graph);
            while (pathing.isScanning)
            {
                yield return(null);
            }



            pathing.AddWorkItem(() =>
            {
                StitchToNeighbors(graph);
            });
            pathing.FlushWorkItems();

            while (pathing.IsAnyWorkItemInProgress)
            {
                yield return(null);
            }

            if (!lastUpdate.ContainsKey(graph))
            {
                lastUpdate.Add(graph, Time.time);
            }
            else
            {
                lastUpdate[graph] = Time.time;
            }
        }

        updateInProgress = false;
        if (updateQueue.Count > 0)
        {
            StartCoroutine(UpdateGraphRoutine(updateQueue.Dequeue()));
        }
    }
Exemple #2
0
 public static void RegisterSafeUpdate(System.Action callback)
 {
     active.AddWorkItem(new AstarWorkItem(callback));
 }