hedgewars/uAIAmmoTests.pas
changeset 374 95169697cc38
parent 371 731ad6d27bd1
child 375 18012da67681
--- a/hedgewars/uAIAmmoTests.pas	Sat Jan 27 18:33:14 2007 +0000
+++ b/hedgewars/uAIAmmoTests.pas	Sun Jan 28 16:40:04 2007 +0000
@@ -21,8 +21,8 @@
 uses SDLh, uGears, uConsts, uFloat;
 
 function TestBazooka(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
-(*function TestGrenade(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
-function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
+function TestGrenade(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
+(*function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
 function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
 function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
@@ -30,7 +30,7 @@
 type TAmmoTestProc = function (Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
 const AmmoTests: array[TAmmoType] of TAmmoTestProc =
                  (
-{amGrenade}       nil,//TestGrenade,
+{amGrenade}       @TestGrenade,
 {amClusterBomb}   nil,
 {amBazooka}       @TestBazooka,
 {amUFO}           nil,
@@ -116,19 +116,19 @@
 until (rTime > 4500);
 TestBazooka:= Result
 end;
-{
+
 function TestGrenade(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
 const tDelta = 24;
 var Vx, Vy, r: hwFloat;
-    Score, EX, EY: LongInt;
+    Score, EX, EY, Result: LongInt;
     TestTime: Longword;
 
     function CheckTrace: LongInt;
     var x, y, dY: hwFloat;
         t: LongInt;
     begin
-    x:= Me.X;
-    y:= Me.Y;
+    x:= Me^.X;
+    y:= Me^.Y;
     dY:= -Vy;
     t:= TestTime;
     repeat
@@ -136,11 +136,11 @@
       y:= y + dY;
       dY:= dY + cGravity;
       dec(t)
-    until TestColl(round(x), round(y), 5) or (t = 0);
-    EX:= round(x);
-    EY:= round(y);
-    if t < 50 then Result:= RateExplosion(Me, round(x), round(y), 101)
-              else Result:= Low(LongInt)
+    until TestColl(hwRound(x), hwRound(y), 5) or (t = 0);
+    EX:= hwRound(x);
+    EY:= hwRound(y);
+    if t < 50 then CheckTrace:= RateExplosion(Me, EX, EY, 101)
+              else CheckTrace:= Low(LongInt)
     end;
 
 begin
@@ -149,17 +149,16 @@
 ExplR:= 0;
 repeat
   inc(TestTime, 1000);
-  Vx:= (Targ.X - Me.X) / (TestTime + tDelta);
-  Vy:= cGravity*((TestTime + tDelta) div 2) - (Targ.Y - Me.Y) / (TestTime + tDelta);
-  r:= sqr(Vx) + sqr(Vy);
-  if r <= 1 then
+  Vx:= (Targ.X - Me^.X) / (TestTime + tDelta);
+  Vy:= cGravity * ((TestTime + tDelta) div 2) - (Targ.Y - Me^.Y) / (TestTime + tDelta);
+  r:= Distance(Vx, Vy);
+  if not (r > 1) then
      begin
      Score:= CheckTrace;
      if Result < Score then
         begin
-        r:= sqrt(r);
-        Angle:= DxDy2AttackAngle(Vx, Vy) + rndSign(random(Level));
-        Power:= round(r * cMaxPower) + rndSign(random(Level) * 12);
+        Angle:= DxDy2AttackAngle(Vx, Vy) + AIrndSign(random(Level));
+        Power:= hwRound(r * cMaxPower) + AIrndSign(random(Level) * 12);
         Time:= TestTime;
         ExplR:= 100;
         ExplX:= EX;
@@ -167,9 +166,10 @@
         Result:= Score
         end;
      end
-until (TestTime = 5000)
+until (TestTime = 5000);
+TestGrenade:= Result
 end;
-
+{
 function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var Time: Longword; var Angle, Power: LongInt; var ExplX, ExplY, ExplR: LongInt): LongInt;
 var Vx, Vy, x, y: hwFloat;
 begin