private void ResetTile(Tile targetTile) { targetTile.Next = null; targetTile.DistanceToExit = double.MaxValue; foreach (Tile tile in targetTile.GetNeighbours(this)) { if (tile.Type != TileType.Wall) tile.IsVisited = false; } targetTile.Ancestors.ForEach( tile => this.ResetTile(tile) ); targetTile.Ancestors.Clear(); }
private void BackwardUpdate(Tile source, Tile target) { // Check if we should use the source as new path if(source.DistanceToExit + target.Type.Weight < target.DistanceToExit) { if(target.Next != null) target.Next.Ancestors.Remove(target); target.Next = source; source.Ancestors.Add(target); target.DistanceToExit = source.DistanceToExit + target.Type.Weight; foreach (Tile tile in target.GetNeighbours(this)) { if(tile.Type == TileType.Wall) continue; if(tile == target.Next) continue; this.BackwardUpdate(target, tile); } } }