private void Invalidate() { positionLastFrame = transform.localPosition; rotationLastFrame = transform.localRotation; scaleLastFrame = transform.localScale; if (collider) { foreach (var controller in cellController) { controller.RemoveCollider(collider); controller.Invalidate(); } cellController = new List <NavCellController>(); foreach (var controller in NavCellController.GetCellsInBounds(collider, mesh)) { cellController.Add(controller); controller.AddCollider(collider); controller.Invalidate(); } } else { foreach (Transform child in transform) { child.GetComponent <NavMeshTracker>()?.Invalidate(); } } }
private bool _QueueCell(float priority, NavCellController cellController) { lock (queueLock) { if (!queuedCells.Contains(cellController)) { queuedCells.Add(cellController); queue.Enqueue(priority, cellController); return(true); } else { return(false); } } }
private IEnumerator Generate() { isRunning = true; while (QueueHasElements) { float key = -1f; NavCellController cell = null; lock (queueLock) { (key, cell) = queue.Dequeue(); queuedCells.Remove(cell); } yield return(cell.Generate(navMeshGenerationSettings)); } isRunning = false; }
public static bool QueueCell(float priority, NavCellController cellController) { return(instance._QueueCell(priority, cellController)); }