private void NextStep(int count = 0) { stepCount++; nextStepTimer = nextStepCooldown; if (goalTile == null || startTile == null) { doAutoStepThrough = false; return; } if (pathfinder == null) { pathfinder = new Pathfinder(tilegraph.Nodes[startTile], tilegraph.Nodes[goalTile]); tilePath = null; stepCount = 0; } pathfinder.ExecutePathfindingStep(); if (pathfinder.HasFoundPath) { tilePath = pathfinder.Path; } foreach (Node <Tile> node in tilegraph.Nodes.Values) { GameObject tileGameObject = tileGameObjects[node.Data]; TileInstance tileInstance = tileGameObject.GetComponent <TileInstance>(); SpriteRenderer spriteRenderer = tileGameObject.GetComponent <SpriteRenderer>(); if (tilePath != null) { if (tilePath.Contains(node.Data)) { tileInstance.Node = null; if (node.Data == startTile || node.Data == goalTile) { continue; } spriteRenderer.color = Color.blue; } else { ResetTileVisuals(node, tileInstance, spriteRenderer); } } else { if (pathfinder.IsInOpenSet(node)) { SetTileVisuals(node, tileInstance, spriteRenderer, OpenSetTileColour); } else if (pathfinder.IsInClosedSet(node)) { SetTileVisuals(node, tileInstance, spriteRenderer, ClosedSetTileColour); } else { ResetTileVisuals(node, tileInstance, spriteRenderer); } } } if (!pathfinder.HasFoundPath && !pathfinder.SearchIsComplete) { if (doAutoStepThrough && count > 0) { NextStep(--count); } return; } pathfinder = null; doAutoStepThrough = false; Debug.Log($"Found path in {stepCount} steps"); }