Exemplo n.º 1
0
        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;
        }