hedgewars/uAIMisc.pas
changeset 509 fd58135a4407
parent 498 9c8b385dc9a1
child 542 ec26095f1bed
--- a/hedgewars/uAIMisc.pas	Sun May 06 20:50:53 2007 +0000
+++ b/hedgewars/uAIMisc.pas	Mon May 07 20:21:26 2007 +0000
@@ -43,6 +43,7 @@
 function TestColl(x, y, r: LongInt): boolean;
 function RateExplosion(Me: PGear; x, y, r: LongInt): LongInt;
 function RateShove(Me: PGear; x, y, r, power: LongInt): LongInt;
+function RateShotgun(Me: PGear; x, y: LongInt): LongInt;
 function HHGo(Gear, AltGear: PGear; var GoInfo: TGoInfo): boolean;
 function AIrndSign(num: LongInt): LongInt;
 
@@ -184,7 +185,7 @@
          if dmg > 0 then
             begin
             dmg:= dmg shr 1;
-            if dmg > abs(Score) then
+            if dmg >= abs(Score) then
                if Score > 0 then inc(Result, KillScore)
                             else dec(Result, KillScore * 3)
             else
@@ -205,7 +206,7 @@
          dmg:= r - hwRound(DistanceI(Point.x - x, Point.y - y));
          if dmg > 0 then
             begin
-            if power > abs(Score) then
+            if power >= abs(Score) then
                if Score > 0 then inc(Result, KillScore)
                             else dec(Result, KillScore * 3)
             else
@@ -216,6 +217,35 @@
 RateShove:= Result * 1024
 end;
 
+function RateShotgun(Me: PGear; x, y: LongInt): LongInt;
+var i, dmg, Result: LongInt;
+begin
+Result:= 0;
+// add our virtual position
+with Targets.ar[Targets.Count] do
+     begin
+     Point.x:= hwRound(Me^.X);
+     Point.y:= hwRound(Me^.Y);
+     Score:= - ThinkingHH^.Health
+     end;
+// rate shot
+for i:= 0 to Targets.Count do
+    with Targets.ar[i] do
+         begin
+         dmg:= min(cHHRadius + cShotgunRadius - hwRound(DistanceI(Point.x - x, Point.y - y)), 25);
+         if dmg > 0 then
+            begin
+            if dmg >= abs(Score) then
+               if Score > 0 then inc(Result, KillScore)
+                            else dec(Result, KillScore * 3)
+            else
+               if Score > 0 then inc(Result, dmg)
+                            else dec(Result, dmg * 3)
+            end;
+         end;
+RateShotgun:= Result * 1024
+end;
+
 function HHJump(Gear: PGear; JumpType: TJumpType; var GoInfo: TGoInfo): boolean;
 var bX, bY: LongInt;
     Result: boolean;