16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
17 *) |
17 *) |
18 |
18 |
19 unit uAIAmmoTests; |
19 unit uAIAmmoTests; |
20 interface |
20 interface |
21 uses SDLh, uGears, uConsts; |
21 uses SDLh, uGears, uConsts, uFloat; |
22 |
22 |
23 function TestBazooka(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
23 (*function TestBazooka(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
24 function TestGrenade(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
24 function TestGrenade(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
25 function TestShotgun(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
25 function TestShotgun(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
26 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
26 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
27 function TestBaseballBat(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
27 function TestBaseballBat(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
28 function TestFirePunch(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
28 function TestFirePunch(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
48 {amMineStrike} nil, |
48 {amMineStrike} nil, |
49 {amBlowTorch} nil |
49 {amBlowTorch} nil |
50 ); |
50 ); |
51 |
51 |
52 const BadTurn = Low(integer); |
52 const BadTurn = Low(integer); |
|
53 *) |
53 |
54 |
54 implementation |
55 implementation |
55 uses uMisc, uAIMisc, uLand; |
56 uses uMisc, uAIMisc, uLand; |
56 |
57 { |
57 function Metric(x1, y1, x2, y2: integer): integer; |
58 function Metric(x1, y1, x2, y2: integer): integer; |
58 begin |
59 begin |
59 Result:= abs(x1 - x2) + abs(y1 - y2) |
60 Result:= abs(x1 - x2) + abs(y1 - y2) |
60 end; |
61 end; |
61 |
62 |
62 function TestBazooka(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
63 function TestBazooka(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
63 var Vx, Vy, r: Double; |
64 var Vx, Vy, r: hwFloat; |
64 rTime: Double; |
65 rTime: hwFloat; |
65 Score, EX, EY: integer; |
66 Score, EX, EY: integer; |
66 |
67 |
67 function CheckTrace: integer; |
68 function CheckTrace: integer; |
68 var x, y, dX, dY: Double; |
69 var x, y, dX, dY: hwFloat; |
69 t: integer; |
70 t: integer; |
70 begin |
71 begin |
71 x:= Me.X; |
72 x:= Me.X; |
72 y:= Me.Y; |
73 y:= Me.Y; |
73 dX:= Vx; |
74 dX:= Vx; |
113 until (rTime >= 4500) |
114 until (rTime >= 4500) |
114 end; |
115 end; |
115 |
116 |
116 function TestGrenade(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
117 function TestGrenade(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
117 const tDelta = 24; |
118 const tDelta = 24; |
118 var Vx, Vy, r: Double; |
119 var Vx, Vy, r: hwFloat; |
119 Score, EX, EY: integer; |
120 Score, EX, EY: integer; |
120 TestTime: Longword; |
121 TestTime: Longword; |
121 |
122 |
122 function CheckTrace: integer; |
123 function CheckTrace: integer; |
123 var x, y, dY: Double; |
124 var x, y, dY: hwFloat; |
124 t: integer; |
125 t: integer; |
125 begin |
126 begin |
126 x:= Me.X; |
127 x:= Me.X; |
127 y:= Me.Y; |
128 y:= Me.Y; |
128 dY:= -Vy; |
129 dY:= -Vy; |
165 end |
166 end |
166 until (TestTime = 5000) |
167 until (TestTime = 5000) |
167 end; |
168 end; |
168 |
169 |
169 function TestShotgun(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
170 function TestShotgun(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
170 var Vx, Vy, x, y: Double; |
171 var Vx, Vy, x, y: hwFloat; |
171 begin |
172 begin |
172 ExplR:= 0; |
173 ExplR:= 0; |
173 if Metric(round(Me.X), round(Me.Y), Targ.X, Targ.Y) < 80 then |
174 if Metric(round(Me.X), round(Me.Y), Targ.X, Targ.Y) < 80 then |
174 begin |
175 begin |
175 Result:= BadTurn; |
176 Result:= BadTurn; |
195 until (abs(Targ.X - x) + abs(Targ.Y - y) < 4) or (x < 0) or (y < 0) or (x > 2048) or (y > 1024); |
196 until (abs(Targ.X - x) + abs(Targ.Y - y) < 4) or (x < 0) or (y < 0) or (x > 2048) or (y > 1024); |
196 Result:= BadTurn |
197 Result:= BadTurn |
197 end; |
198 end; |
198 |
199 |
199 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
200 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: Integer; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer; |
200 var Vx, Vy, x, y, t: Double; |
201 var Vx, Vy, x, y, t: hwFloat; |
201 d: Longword; |
202 d: Longword; |
202 begin |
203 begin |
203 ExplR:= 0; |
204 ExplR:= 0; |
204 if abs(Me.X - Targ.X) + abs(Me.Y - Targ.Y) < 80 then |
205 if abs(Me.X - Targ.X) + abs(Me.Y - Targ.Y) < 80 then |
205 begin |
206 begin |