hedgewars/uAIMisc.pas
changeset 6778 a9c6457dca29
parent 6777 fb71556205f4
child 6782 33009ac4de80
equal deleted inserted replaced
6777:fb71556205f4 6778:a9c6457dca29
   187 end;
   187 end;
   188 
   188 
   189 function RatePlace(Gear: PGear): LongInt;
   189 function RatePlace(Gear: PGear): LongInt;
   190 var i, r: LongInt;
   190 var i, r: LongInt;
   191     rate: LongInt;
   191     rate: LongInt;
   192 begin
   192     gX, gY: real;
       
   193 begin
       
   194 gX:= hwFloat2Float(Gear^.X);
       
   195 gY:= hwFloat2Float(Gear^.Y);
   193 rate:= 0;
   196 rate:= 0;
   194 for i:= 0 to Pred(bonuses.Count) do
   197 for i:= 0 to Pred(bonuses.Count) do
   195     with bonuses.ar[i] do
   198     with bonuses.ar[i] do
   196         begin
   199         begin
   197         r:= hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
   200         r:= Radius;
       
   201         if abs(gX-X)+abs(gY-Y) < Radius then
       
   202             r:= trunc(sqrt(sqr(gX - X)+sqr(gY - Y)));
   198         if r < 15 then
   203         if r < 15 then
   199                 inc(rate, Score * Radius)
   204                 inc(rate, Score * Radius)
   200         else if r < Radius then
   205         else if r < Radius then
   201                 inc(rate, Score * (Radius - r))
   206                 inc(rate, Score * (Radius - r))
   202         end;
   207         end;
   359             dmg:= r - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)));
   364             dmg:= r - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)));
   360             dmg:= trunc(dmg * dmgMod);
   365             dmg:= trunc(dmg * dmgMod);
   361             end;
   366             end;
   362         if dmg > 0 then
   367         if dmg > 0 then
   363             begin
   368             begin
   364             if (Flags and 1 <> 0) and TraceShoveDrown(Me, Point.x, Point.y, dX, dY) then
   369             if (Flags and 1 <> 0) and TraceShoveDrown(Me, Point.x, Point.y-2, dX, dY) then
   365                 if Score > 0 then
   370                 if Score > 0 then
   366                     inc(rate, KillScore + Score div 10)   // Add a bit of a bonus for bigger hog drownings
   371                     inc(rate, KillScore + Score div 10)   // Add a bit of a bonus for bigger hog drownings
   367                 else
   372                 else
   368                     dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs
   373                     dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs
   369             else if power >= abs(Score) then
   374             else if power >= abs(Score) then