hedgewars/uAIAmmoTests.pas
changeset 13668 2b194214732d
parent 13478 d3209e0caf12
child 13669 c6ee1b0b957f
equal deleted inserted replaced
13667:bfc2727daead 13668:2b194214732d
   140 function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
   140 function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
   141 var Vx, Vy, r, mX, mY: real;
   141 var Vx, Vy, r, mX, mY: real;
   142     rTime: LongInt;
   142     rTime: LongInt;
   143     EX, EY: LongInt;
   143     EX, EY: LongInt;
   144     valueResult: LongInt;
   144     valueResult: LongInt;
   145     x, y, dX, dY: real;
   145     targXWrap, x, y, dX, dY: real;
   146     t: LongInt;
   146     t: LongInt;
   147     value: LongInt;
   147     value: LongInt;
   148 begin
   148 begin
   149 mX:= hwFloat2Float(Me^.X);
   149 mX:= hwFloat2Float(Me^.X);
   150 mY:= hwFloat2Float(Me^.Y);
   150 mY:= hwFloat2Float(Me^.Y);
   151 ap.Time:= 0;
   151 ap.Time:= 0;
   152 rTime:= 350;
   152 rTime:= 350;
   153 ap.ExplR:= 0;
   153 ap.ExplR:= 0;
       
   154 if (Targ.Point.X < mX) then
       
   155      targXWrap:= Targ.Point.X + (RightX-LeftX)
       
   156 else targXWrap:= Targ.Point.X - (RightX-LeftX);
   154 valueResult:= BadTurn;
   157 valueResult:= BadTurn;
   155 repeat
   158 repeat
   156     rTime:= rTime + 300 + Level * 50 + random(300);
   159     rTime:= rTime + 300 + Level * 50 + random(300);
   157     Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime;
   160     if (WorldEdge = weWrap) and (random(2)=0) then
       
   161          Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime
       
   162     else Vx:= - windSpeed * rTime * 0.5 + (targXWrap + AIrndSign(2) - mX) / rTime;
   158     Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - mY) / rTime;
   163     Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - mY) / rTime;
   159     r:= sqr(Vx) + sqr(Vy);
   164     r:= sqr(Vx) + sqr(Vy);
   160     if not (r > 1) then
   165     if not (r > 1) then
   161         begin
   166         begin
   162         x:= mX;
   167         x:= mX;
   163         y:= mY;
   168         y:= mY;
   164         dX:= Vx;
   169         dX:= Vx;
   165         dY:= -Vy;
   170         dY:= -Vy;
   166         t:= rTime;
   171         t:= rTime;
   167         repeat
   172         repeat
       
   173             x:= CheckWrap(x);
   168             x:= x + dX;
   174             x:= x + dX;
       
   175 
   169             y:= y + dY;
   176             y:= y + dY;
   170             dX:= dX + windSpeed;
   177             dX:= dX + windSpeed;
       
   178             //dX:= CheckBounce(x,dX);
   171             dY:= dY + cGravityf;
   179             dY:= dY + cGravityf;
   172             dec(t)
   180             dec(t)
   173         until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
   181         until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
   174                ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t <= 0);
   182                ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t <= 0);
   175 
   183