hedgewars/uAIMisc.pas
changeset 433 9f8f22094c0e
parent 393 db01cc79f278
child 498 9c8b385dc9a1
equal deleted inserted replaced
432:b0f693024b50 433:9f8f22094c0e
   197 
   197 
   198 function RateShove(Me: PGear; x, y, r, power: LongInt): LongInt;
   198 function RateShove(Me: PGear; x, y, r, power: LongInt): LongInt;
   199 var i, dmg, Result: LongInt;
   199 var i, dmg, Result: LongInt;
   200 begin
   200 begin
   201 Result:= 0;
   201 Result:= 0;
   202 for i:= 0 to Targets.Count do
   202 for i:= 0 to Pred(Targets.Count) do
   203     with Targets.ar[i] do
   203     with Targets.ar[i] do
   204          begin
   204          begin
   205          dmg:= r - hwRound(Distance(Point.x - x, Point.y - y));
   205          dmg:= r - hwRound(Distance(Point.x - x, Point.y - y));
   206          if dmg > 0 then
   206          if dmg > 0 then
   207             begin
   207             begin
   239                  if not TestCollisionXwithXYShift(Gear, 0, -2, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - 2 else
   239                  if not TestCollisionXwithXYShift(Gear, 0, -2, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - 2 else
   240                  if not TestCollisionXwithXYShift(Gear, 0, -1, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - 1;
   240                  if not TestCollisionXwithXYShift(Gear, 0, -1, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - 1;
   241               if not (TestCollisionXwithGear(Gear, hwSign(Gear^.dX))
   241               if not (TestCollisionXwithGear(Gear, hwSign(Gear^.dX))
   242                  or   TestCollisionYwithGear(Gear, -1)) then
   242                  or   TestCollisionYwithGear(Gear, -1)) then
   243                  begin
   243                  begin
   244                  Gear^.dY:= _0_15;
   244                  Gear^.dY:= -_0_15;
   245                  Gear^.dX:= hwSign(Gear^.dX) * _0_15;
   245                  Gear^.dX:= hwSign(Gear^.dX) * _0_15;
   246                  Gear^.State:= Gear^.State or gstFalling or gstHHJumping
   246                  Gear^.State:= Gear^.State or gstFalling or gstHHJumping
   247                  end else exit(Result)
   247                  end else exit(Result)
   248               end
   248               end
   249     end;
   249     end;
   251 repeat
   251 repeat
   252 if not (Gear^.Y + cHHRadius < cWaterLine) then exit(Result);
   252 if not (Gear^.Y + cHHRadius < cWaterLine) then exit(Result);
   253 if (Gear^.State and gstFalling) <> 0 then
   253 if (Gear^.State and gstFalling) <> 0 then
   254    begin
   254    begin
   255    if (GoInfo.Ticks = 350) then
   255    if (GoInfo.Ticks = 350) then
   256       if (hwAbs(Gear^.dX) < cLittle + cLittle) and (Gear^.dY < -_0_02) then
   256       if (not (hwAbs(Gear^.dX) > cLittle)) and (Gear^.dY < -_0_02) then
   257          begin
   257          begin
   258          Gear^.dY:= -_0_25;
   258          Gear^.dY:= -_0_25;
   259          Gear^.dX:= hwSign(Gear^.dX) * _0_02
   259          Gear^.dX:= hwSign(Gear^.dX) * _0_02
   260          end;
   260          end;
   261    if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then SetLittle(Gear^.dX);
   261    if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then SetLittle(Gear^.dX);