140 function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt; |
140 function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt; |
141 var Vx, Vy, r, mX, mY: real; |
141 var Vx, Vy, r, mX, mY: real; |
142 rTime: LongInt; |
142 rTime: LongInt; |
143 EX, EY: LongInt; |
143 EX, EY: LongInt; |
144 valueResult: LongInt; |
144 valueResult: LongInt; |
145 x, y, dX, dY: real; |
145 targXWrap, x, y, dX, dY: real; |
146 t: LongInt; |
146 t: LongInt; |
147 value: LongInt; |
147 value: LongInt; |
148 begin |
148 begin |
149 mX:= hwFloat2Float(Me^.X); |
149 mX:= hwFloat2Float(Me^.X); |
150 mY:= hwFloat2Float(Me^.Y); |
150 mY:= hwFloat2Float(Me^.Y); |
151 ap.Time:= 0; |
151 ap.Time:= 0; |
152 rTime:= 350; |
152 rTime:= 350; |
153 ap.ExplR:= 0; |
153 ap.ExplR:= 0; |
|
154 if (Targ.Point.X < mX) then |
|
155 targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
156 else targXWrap:= Targ.Point.X - (RightX-LeftX); |
154 valueResult:= BadTurn; |
157 valueResult:= BadTurn; |
155 repeat |
158 repeat |
156 rTime:= rTime + 300 + Level * 50 + random(300); |
159 rTime:= rTime + 300 + Level * 50 + random(300); |
157 Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime; |
160 if (WorldEdge = weWrap) and (random(2)=0) then |
|
161 Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime |
|
162 else Vx:= - windSpeed * rTime * 0.5 + (targXWrap + AIrndSign(2) - mX) / rTime; |
158 Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - mY) / rTime; |
163 Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - mY) / rTime; |
159 r:= sqr(Vx) + sqr(Vy); |
164 r:= sqr(Vx) + sqr(Vy); |
160 if not (r > 1) then |
165 if not (r > 1) then |
161 begin |
166 begin |
162 x:= mX; |
167 x:= mX; |
163 y:= mY; |
168 y:= mY; |
164 dX:= Vx; |
169 dX:= Vx; |
165 dY:= -Vy; |
170 dY:= -Vy; |
166 t:= rTime; |
171 t:= rTime; |
167 repeat |
172 repeat |
|
173 x:= CheckWrap(x); |
168 x:= x + dX; |
174 x:= x + dX; |
|
175 |
169 y:= y + dY; |
176 y:= y + dY; |
170 dX:= dX + windSpeed; |
177 dX:= dX + windSpeed; |
|
178 //dX:= CheckBounce(x,dX); |
171 dY:= dY + cGravityf; |
179 dY:= dY + cGravityf; |
172 dec(t) |
180 dec(t) |
173 until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
181 until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
174 ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t <= 0); |
182 ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t <= 0); |
175 |
183 |