anchor.diff:      for I := 0 to PolyArr[fMinN.Idx].NearbyCount-1 do
       begin
         Idx := PolyArr[ fMinN.Idx ].Nearby[I];
  +      // New polygon
         if (fUsedNodes[Idx] = nil) then
         begin
           N := GetNodeAt(Idx);
           N.Parent := fMinN;
  +        N.Point := PolyArr[ fMinN.Idx ].NearbyPoints[I];
           N.CostTo := fMinN.CostTo + MovementCost(fMinN.Idx, Idx, fMinN.Point, N.Point);
           fHeap.Push(N);
         end
  +      // Visited polygon (recalculate estimation and actualize better result)
         else if (fUsedNodes[Idx].Estim <> c_closed) then
         begin
  +        POMPoint := PolyArr[ fMinN.Idx ].NearbyPoints[I];
           NewCost := fMinN.CostTo + MovementCost(fMinN.Idx, Idx, fMinN.Point, POMPoint);
           if (NewCost < fUsedNodes[Idx].CostTo) then
           begin
  
positive.code: end;
  
  
  function TNavMeshPathFinding.ReturnRoute(out aRoutePointArray: TKMPointArray): TKMWordArray;
  const
    USED_PENALIZATION = 40;
  var
    Count, POM: Word;
    N: TNavMeshNode;
    Output: TKMWordArray;
  begin
  
negative.code:     fUsedNodes: array of TNavMeshNode;
  
      function HeapCmp(A,B: Pointer): Boolean;
      procedure Flush(aDestroy: Boolean = False);
    protected
      function GetNodeAt(aIdx: Word): TNavMeshNode;
      function MovementCost(aFrom, aTo: Word; var aSPoint, aEPoint: TKMPoint): Word;
      function EstimateToFinish(aIdx: Word): Word;
  
      function MakeRoute(): Boolean;
      procedure ReturnRoute(out aRouteArray: TKMWordArray; out aRoutePointArray: TKMPointArray);
    public
      constructor Create();
      destructor Destroy(); override;
  
      function Route_Make(aStart, aEnd: TKMPoint; out aRouteArray: TKMWordArray; out aRoutePointArray: TKMPointArray): Boolean;
    end;
  
  
  