hedgewars/uAIAmmoTests.pas
changeset 7078 a3408d9ba5ad
parent 7041 76a9274f280f
child 7132 baf3351646f4
equal deleted inserted replaced
7077:74b0265d79e8 7078:a3408d9ba5ad
    20 
    20 
    21 unit uAIAmmoTests;
    21 unit uAIAmmoTests;
    22 interface
    22 interface
    23 uses SDLh, uConsts, uFloat, uTypes;
    23 uses SDLh, uConsts, uFloat, uTypes;
    24 const amtest_OnTurn = $00000001;
    24 const amtest_OnTurn = $00000001;
       
    25 
       
    26 var windSpeed: real;
    25 
    27 
    26 type TAttackParams = record
    28 type TAttackParams = record
    27         Time: Longword;
    29         Time: Longword;
    28         Angle, Power: LongInt;
    30         Angle, Power: LongInt;
    29         ExplX, ExplY, ExplR: LongInt;
    31         ExplX, ExplY, ExplR: LongInt;
   104             (proc: nil;              flags: 0), // amFlamethrower
   106             (proc: nil;              flags: 0), // amFlamethrower
   105             (proc: @TestGrenade;     flags: 0), // amSMine
   107             (proc: @TestGrenade;     flags: 0), // amSMine
   106             (proc: @TestHammer;      flags: 0), // amHammer
   108             (proc: @TestHammer;      flags: 0), // amHammer
   107             (proc: nil;              flags: 0), // amResurrector
   109             (proc: nil;              flags: 0), // amResurrector
   108             (proc: nil;              flags: 0), // amDrillStrike
   110             (proc: nil;              flags: 0), // amDrillStrike
   109             (proc: @TestSnowball;    flags: 0), // amSnowball
   111             (proc: nil;              flags: 0), // amSnowball
   110             (proc: nil;              flags: 0), // amTardis
   112             (proc: nil;              flags: 0), // amTardis
   111             (proc: nil;              flags: 0), // amStructure
   113             (proc: nil;              flags: 0), // amStructure
   112             (proc: nil;              flags: 0), // amLandGun
   114             (proc: nil;              flags: 0), // amLandGun
   113             (proc: nil;              flags: 0)  // amIceGun
   115             (proc: nil;              flags: 0)  // amIceGun
   114             );
   116             );
   138 rTime:= 350;
   140 rTime:= 350;
   139 ap.ExplR:= 0;
   141 ap.ExplR:= 0;
   140 valueResult:= BadTurn;
   142 valueResult:= BadTurn;
   141 repeat
   143 repeat
   142     rTime:= rTime + 300 + Level * 50 + random(300);
   144     rTime:= rTime + 300 + Level * 50 + random(300);
   143     Vx:= - cWindSpeedf * rTime * 0.5 + (Targ.X + AIrndSign(2) - mX) / rTime;
   145     Vx:= - windSpeed * rTime * 0.5 + (Targ.X + AIrndSign(2) - mX) / rTime;
   144     Vy:= cGravityf * rTime * 0.5 - (Targ.Y - mY) / rTime;
   146     Vy:= cGravityf * rTime * 0.5 - (Targ.Y - mY) / rTime;
   145     r:= sqr(Vx) + sqr(Vy);
   147     r:= sqr(Vx) + sqr(Vy);
   146     if not (r > 1) then
   148     if not (r > 1) then
   147         begin
   149         begin
   148         x:= mX;
   150         x:= mX;
   151         dY:= -Vy;
   153         dY:= -Vy;
   152         t:= rTime;
   154         t:= rTime;
   153         repeat
   155         repeat
   154             x:= x + dX;
   156             x:= x + dX;
   155             y:= y + dY;
   157             y:= y + dY;
   156             dX:= dX + cWindSpeedf;
   158             dX:= dX + windSpeed;
   157             dY:= dY + cGravityf;
   159             dY:= dY + cGravityf;
   158             dec(t)
   160             dec(t)
   159         until TestCollExcludingMe(Me, trunc(x), trunc(y), 5) or (t <= 0);
   161         until TestCollExcludingMe(Me, trunc(x), trunc(y), 5) or (t <= 0);
   160         
   162         
   161         EX:= trunc(x);
   163         EX:= trunc(x);
   196 rTime:= 350;
   198 rTime:= 350;
   197 ap.ExplR:= 0;
   199 ap.ExplR:= 0;
   198 valueResult:= BadTurn;
   200 valueResult:= BadTurn;
   199 repeat
   201 repeat
   200     rTime:= rTime + 300 + Level * 50 + random(1000);
   202     rTime:= rTime + 300 + Level * 50 + random(1000);
   201     Vx:= - cWindSpeedf * rTime * 0.5 + ((Targ.X + AIrndSign(2)) - meX) / rTime;
   203     Vx:= - windSpeed * rTime * 0.5 + ((Targ.X + AIrndSign(2)) - meX) / rTime;
   202     Vy:= cGravityf * rTime * 0.5 - (Targ.Y - meY) / rTime;
   204     Vy:= cGravityf * rTime * 0.5 - (Targ.Y - meY) / rTime;
   203     r:= sqr(Vx) + sqr(Vy);
   205     r:= sqr(Vx) + sqr(Vy);
   204     if not (r > 1) then
   206     if not (r > 1) then
   205         begin
   207         begin
   206         x:= meX;
   208         x:= meX;
   209         dY:= -Vy;
   211         dY:= -Vy;
   210         t:= rTime;
   212         t:= rTime;
   211         repeat
   213         repeat
   212             x:= x + dX;
   214             x:= x + dX;
   213             y:= y + dY;
   215             y:= y + dY;
   214             dX:= dX + cWindSpeedf;
   216             dX:= dX + windSpeed;
   215             dY:= dY + cGravityf;
   217             dY:= dY + cGravityf;
   216             dec(t)
   218             dec(t)
   217         until TestCollExcludingMe(Me, trunc(x), trunc(y), 5) or (t <= 0);
   219         until TestCollExcludingMe(Me, trunc(x), trunc(y), 5) or (t <= 0);
   218         EX:= trunc(x);
   220         EX:= trunc(x);
   219         EY:= trunc(y);
   221         EY:= trunc(y);