diff -r c1ec4b15d70e -r b78e7185ed13 hedgewars/uAIAmmoTests.pas --- a/hedgewars/uAIAmmoTests.pas Thu Jan 05 22:55:45 2006 +0000 +++ b/hedgewars/uAIAmmoTests.pas Sat Jan 07 15:21:44 2006 +0000 @@ -41,6 +41,7 @@ function TestGrenade(Me, Targ: TPoint; Flags: Longword; out Time: Longword; out Angle, Power: integer): boolean; function TestBazooka(Me, Targ: TPoint; Flags: Longword; out Time: Longword; out Angle, Power: integer): boolean; function TestShotgun(Me, Targ: TPoint; Flags: Longword; out Time: Longword; out Angle, Power: integer): boolean; +function TestDEagle(Me, Targ: TPoint; Flags: Longword; out Time: Longword; out Angle, Power: integer): boolean; type TAmmoTestProc = function (Me, Targ: TPoint; Flags: Longword; out Time: Longword; out Angle, Power: integer): boolean; const AmmoTests: array[TAmmoType] of @@ -72,13 +73,16 @@ ( Test: nil; Flags: 0; ), + ( Test: TestDEagle; + Flags: 0; + ), ( Test: nil; Flags: 0; ) ); implementation -uses uMisc, uAIMisc; +uses uMisc, uAIMisc, uLand; function TestGrenade(Me, Targ: TPoint; Flags: Longword; out Time: Longword; out Angle, Power: integer): boolean; var Vx, Vy, r: real; @@ -198,5 +202,25 @@ Result:= true end; +function TestDEagle(Me, Targ: TPoint; Flags: Longword; out Time: Longword; out Angle, Power: integer): boolean; +var Vx, Vy, x, y: real; + d: Longword; +begin +Time:= 0; +Power:= 1; +Vx:= (Targ.X - Me.X)/1024; +Vy:= (Targ.Y - Me.Y)/1024; +x:= Me.X; +y:= Me.Y; +Angle:= DxDy2Angle(Vx, -Vy); +d:= 0; +repeat + x:= x + vX; + y:= y + vY; + if ((round(x) and $FFFFF800) = 0)and((round(y) and $FFFFFC00) = 0) + and (Land[round(y), round(x)] <> 0) then inc(d); +until (abs(Targ.X - x) + abs(Targ.Y - y) < 2) or (x < 0) or (y < 0) or (x > 2048) or (y > 1024); +Result:= d < 50 +end; end.