hedgewars/uAIAmmoTests.pas
changeset 1941 b1ef1f86148c
parent 1854 6e05013899b2
child 2017 7845c77c8d31
equal deleted inserted replaced
1940:bbdca883b5f9 1941:b1ef1f86148c
   286 
   286 
   287 TestMortar:= Result
   287 TestMortar:= Result
   288 end;
   288 end;
   289 
   289 
   290 function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   290 function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
       
   291 const
       
   292   MIN_RANGE =  80;
       
   293   MAX_RANGE = 400;
   291 var Vx, Vy, x, y: hwFloat;
   294 var Vx, Vy, x, y: hwFloat;
   292     rx, ry, Result: LongInt;
   295     rx, ry, Result: LongInt;
       
   296     range: integer;
   293 begin
   297 begin
   294 ap.ExplR:= 0;
   298 ap.ExplR:= 0;
   295 ap.Time:= 0;
   299 ap.Time:= 0;
   296 ap.Power:= 1;
   300 ap.Power:= 1;
   297 if Metric(hwRound(Me^.X), hwRound(Me^.Y), Targ.X, Targ.Y) < 80 then
   301 range:= Metric(hwRound(Me^.X), hwRound(Me^.Y), Targ.X, Targ.Y);
   298    exit(BadTurn);
   302 if ( range < MIN_RANGE ) or ( range > MAX_RANGE ) then exit(BadTurn);
   299 Vx:= (int2hwFloat(Targ.X) - Me^.X) * _1div1024;
   303 Vx:= (int2hwFloat(Targ.X) - Me^.X) * _1div1024;
   300 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * _1div1024;
   304 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * _1div1024;
   301 x:= Me^.X;
   305 x:= Me^.X;
   302 y:= Me^.Y;
   306 y:= Me^.Y;
   303 ap.Angle:= DxDy2AttackAngle(Vx, -Vy);
   307 ap.Angle:= DxDy2AttackAngle(Vx, -Vy);
   313      Result:= RateShotgun(Me, rx, ry) * 2;
   317      Result:= RateShotgun(Me, rx, ry) * 2;
   314      if Result = 0 then Result:= - Metric(Targ.X, Targ.Y, rx, ry) div 64
   318      if Result = 0 then Result:= - Metric(Targ.X, Targ.Y, rx, ry) div 64
   315                    else dec(Result, Level * 4000);
   319                    else dec(Result, Level * 4000);
   316      exit(Result)
   320      exit(Result)
   317      end
   321      end
   318 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x < _0) or (y < _0) or (x > _2048) or (y > _1024);
   322 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x.isNegative) or (y.isNegative) or (x.Round > LAND_WIDTH) or (y.Round > LAND_HEIGHT);
   319 TestShotgun:= BadTurn
   323 TestShotgun:= BadTurn
   320 end;
   324 end;
   321 
   325 
   322 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   326 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   323 var Vx, Vy, x, y, t: hwFloat;
   327 var Vx, Vy, x, y, t: hwFloat;
   334 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * t;
   338 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * t;
   335 x:= Me^.X;
   339 x:= Me^.X;
   336 y:= Me^.Y;
   340 y:= Me^.Y;
   337 ap.Angle:= DxDy2AttackAngle(Vx, -Vy);
   341 ap.Angle:= DxDy2AttackAngle(Vx, -Vy);
   338 d:= 0;
   342 d:= 0;
       
   343 
   339 repeat
   344 repeat
   340   x:= x + vX;
   345   x:= x + vX;
   341   y:= y + vY;
   346   y:= y + vY;
   342   if ((hwRound(x) and LAND_WIDTH_MASK) = 0)and((hwRound(y) and LAND_HEIGHT_MASK) = 0)
   347   if ((hwRound(x) and LAND_WIDTH_MASK) = 0)and((hwRound(y) and LAND_HEIGHT_MASK) = 0)
   343      and (Land[hwRound(y), hwRound(x)] <> 0) then inc(d);
   348      and (Land[hwRound(y), hwRound(x)] <> 0) then inc(d);
   344 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x < _0) or (y < _0) or (x > _2048) or (y > _1024) or (d > 200);
   349 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x.isNegative) or (y.isNegative) or (x.Round > LAND_WIDTH) or (y.Round > LAND_HEIGHT) or (d > 200);
       
   350 
   345 if Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 3 then Result:= max(0, (4 - d div 50) * 7 * 1024)
   351 if Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 3 then Result:= max(0, (4 - d div 50) * 7 * 1024)
   346                                                            else Result:= BadTurn;
   352                                                            else Result:= BadTurn;
   347 TestDesertEagle:= Result
   353 TestDesertEagle:= Result
   348 end;
   354 end;
   349 
   355