anchor.diff:    _Shape.Attach(Self);
     _Shape.Radius := 1;
     _Shape.IsSensor := True;
  +  _Shape.EventBeginContact.AddEvent(@OnBeginContact);
  +  _Shape.EventEndContact.AddEvent(@OnEndContact);
     Detected.Clear;
   end;
   
  
positive.code:   _PathSearchDist := 0;
    _PathSearchSrc := nil;
    _PathSearchList.Add(Self);
    while _PathSearchList.Count > 0 do
    begin
      b := _PathSearchList.Pop;
      if PathCheck(b) then
      begin
        i := 0;
        bo := b;
        while bo <> Self do
        begin
          Inc(i);
          bo := bo._PathSearchSrc;
        end;
        SetLength(Result, i);
        while b <> Self do
        begin
          Dec(i);
          Result[i] := b;
          b := b._PathSearchSrc;
        end;
        Exit;
      end
      else
      if (b = Self) or b.IsBuilt then
  
negative.code:         if b.Links[i].SideA.Base <> b then bo := b.Links[i].SideA.Base
          else bo := b.Links[i].SideB.Base;
          d := b._PathSearchDist + (b.Position - bo.Position).Len;
          if (
            not Assigned(found)
            or (found._PathSearchDist > d)
          ) and (
            (bo._PathSearchID < _SearchID)
            or (d < bo._PathSearchDist)
          )then
          begin
            bo._PathSearchDist := d;
            bo._PathSearchID := _SearchID;
  