public IEnumerator FindAllPaths(TileNode start, int iterationsPerFrame) { running = true; var frontier = new Queue <TileNode>(); _cachedStart = start; frontier.Enqueue(start); _cameFrom = new Dictionary <TileNode, TileNode>(); Distances = new Dictionary <TileNode, int> { [start] = 0 }; var iterations = 0; // Debug.Log("pathfinding..."); while (frontier.Count > 0) { var current = frontier.Dequeue(); foreach (var next in tilemapManager.GetConnectionsTo(current)) { if (Distances.ContainsKey(next)) { continue; } frontier.Enqueue(next); Distances[next] = Distances[current] + 1; _cameFrom[next] = current; } //performance things iterations++; // ReSharper disable once InvertIf if (iterations >= iterationsPerFrame) { iterations = 0; yield return(null); } } pathStatus = 1; running = false; }