hedgewars/uAIAmmoTests.pas
changeset 11474 67ae276ba229
parent 11046 47a8c19ecb60
child 11475 1d478892cf1c
equal deleted inserted replaced
11473:023db094b22d 11474:67ae276ba229
    34         ExplX, ExplY, ExplR: LongInt;
    34         ExplX, ExplY, ExplR: LongInt;
    35         AttackPutX, AttackPutY: LongInt;
    35         AttackPutX, AttackPutY: LongInt;
    36         end;
    36         end;
    37 
    37 
    38 function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    38 function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
       
    39 function TestBee(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    39 function TestSnowball(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    40 function TestSnowball(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    40 function TestGrenade(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    41 function TestGrenade(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    41 function TestMolotov(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    42 function TestMolotov(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    42 function TestClusterBomb(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    43 function TestClusterBomb(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    43 function TestWatermelon(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    44 function TestWatermelon(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
    66             (
    67             (
    67             (proc: nil;              flags: 0), // amNothing
    68             (proc: nil;              flags: 0), // amNothing
    68             (proc: @TestGrenade;     flags: 0), // amGrenade
    69             (proc: @TestGrenade;     flags: 0), // amGrenade
    69             (proc: @TestClusterBomb; flags: 0), // amClusterBomb
    70             (proc: @TestClusterBomb; flags: 0), // amClusterBomb
    70             (proc: @TestBazooka;     flags: 0), // amBazooka
    71             (proc: @TestBazooka;     flags: 0), // amBazooka
    71             (proc: nil;              flags: 0), // amBee
    72             (proc: @TestBee;         flags: amtest_Rare), // amBee
    72             (proc: @TestShotgun;     flags: 0), // amShotgun
    73             (proc: @TestShotgun;     flags: 0), // amShotgun
    73             (proc: nil;              flags: 0), // amPickHammer
    74             (proc: nil;              flags: 0), // amPickHammer
    74             (proc: nil;              flags: 0), // amSkip
    75             (proc: nil;              flags: 0), // amSkip
    75             (proc: nil;              flags: 0), // amRope
    76             (proc: nil;              flags: 0), // amRope
    76             (proc: nil;              flags: 0), // amMine
    77             (proc: nil;              flags: 0), // amMine
   190 //until (value > 204800) or (rTime > 4250); not so useful since adding score to the drowning
   191 //until (value > 204800) or (rTime > 4250); not so useful since adding score to the drowning
   191 until rTime > 5050 - Level * 800;
   192 until rTime > 5050 - Level * 800;
   192 TestBazooka:= valueResult
   193 TestBazooka:= valueResult
   193 end;
   194 end;
   194 
   195 
       
   196 function calcBeeFlight(Me: PGear; x, y, dx, dy, tX, tY: real; var eX, eY: LongInt): LongInt;
       
   197 var t: Longword;
       
   198     f: boolean;
       
   199     speed, d: real;
       
   200 begin
       
   201         addfilelog('002');
       
   202 
       
   203     speed:= sqrt(sqr(dx) + sqr(dy));
       
   204     // parabola flight before activation
       
   205     t:= 500;
       
   206     repeat
       
   207         x:= x + dx;
       
   208         y:= y + dy;
       
   209         dy:= dy + cGravityf;
       
   210         f:= ((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
       
   211            ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5));
       
   212         dec(t)
       
   213     until (t = 0) or (y >= cWaterLine) or f;
       
   214 
       
   215     if f then
       
   216     begin
       
   217         eX:= trunc(x);
       
   218         eY:= trunc(y);
       
   219         exit(RateExplosion(Me, eX, eY, 101, afTrackFall or afErasesLand));
       
   220     end;
       
   221         
       
   222     // activated
       
   223     t:= 5000;
       
   224     
       
   225     repeat
       
   226         if (t and $F) = 0 then
       
   227         begin
       
   228             dx:= 0.9 * (dx + 0.000064 * (tX - x));
       
   229             dy:= 0.9 * (dy + 0.000064 * (tY - y));
       
   230             d := speed / sqrt(sqr(dx) + sqr(dy));
       
   231             dx:= dx * d;
       
   232             dy:= dy * d;
       
   233             end;
       
   234 
       
   235         x:= x + dx;
       
   236         y:= y + dy;
       
   237         f:= ((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
       
   238            ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5));
       
   239         dec(t)
       
   240     until (t = 0) or f;
       
   241 
       
   242     if f then
       
   243     begin
       
   244         eX:= trunc(x);
       
   245         eY:= trunc(y);
       
   246         exit(RateExplosion(Me, eX, eY, 101, afTrackFall or afErasesLand));
       
   247     end
       
   248     else
       
   249         calcBeeFlight:= BadTurn
       
   250 end;
       
   251 
       
   252 function TestBee(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
       
   253 var i, j: LongInt;
       
   254     valueResult, v: LongInt;
       
   255     mX, mY, dX: real;
       
   256     eX, eY: LongInt;
       
   257 begin
       
   258     if Level > 1 then 
       
   259         exit(BadTurn);
       
   260     addfilelog('001');
       
   261     eX:= 0;
       
   262     eY:= 0;
       
   263     mX:= hwFloat2Float(Me^.X);
       
   264     mY:= hwFloat2Float(Me^.Y);
       
   265     valueResult:= BadTurn;
       
   266     for i:= 0 to 8 do
       
   267         for j:= 0 to 1 do
       
   268             begin
       
   269             ap.Angle:= i * 120;
       
   270             ap.Power:= random(1700) + 300;
       
   271             dx:= sin(ap.Angle / 2048);
       
   272             if j = 0 then 
       
   273                 begin
       
   274                 ap.Angle:= -ap.Angle;
       
   275                 dx:= -dx;
       
   276                 end;
       
   277             
       
   278             v:= calcBeeFlight(Me
       
   279                     , mX
       
   280                     , mY
       
   281                     , sin(ap.Angle / 2048) * ap.Power / cMaxPower
       
   282                     , cos(ap.Angle / 2048) * ap.Power / cMaxPower
       
   283                     , Targ.Point.X
       
   284                     , Targ.Point.Y
       
   285                     , eX
       
   286                     , eY);
       
   287                     
       
   288             if v > valueResult then
       
   289                 begin
       
   290                 ap.ExplR:= 100;
       
   291                 ap.ExplX:= eX;
       
   292                 ap.ExplY:= eY;
       
   293                 valueResult:= v
       
   294                 end
       
   295             end;
       
   296 
       
   297     ap.AttackPutX:= Targ.Point.X;
       
   298     ap.AttackPutY:= Targ.Point.Y;
       
   299 
       
   300     TestBee:= valueResult
       
   301 end;
   195 
   302 
   196 function TestDrillRocket(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
   303 function TestDrillRocket(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
   197 var Vx, Vy, r, mX, mY: real;
   304 var Vx, Vy, r, mX, mY: real;
   198     rTime: LongInt;
   305     rTime: LongInt;
   199     EX, EY: LongInt;
   306     EX, EY: LongInt;