218 end; |
218 end; |
219 |
219 |
220 //////////////////////////////////////////////////////////////////////////////// |
220 //////////////////////////////////////////////////////////////////////////////// |
221 procedure doStepUFOWork(Gear: PGear); |
221 procedure doStepUFOWork(Gear: PGear); |
222 var t: hwFloat; |
222 var t: hwFloat; |
|
223 y: LongInt; |
223 begin |
224 begin |
224 AllInactive:= false; |
225 AllInactive:= false; |
225 t:= Distance(Gear^.dX, Gear^.dY); |
226 t:= Distance(Gear^.dX, Gear^.dY); |
226 Gear^.dX:= Gear^.Elasticity * (Gear^.dX + _0_000004 * (TargetPoint.X - hwRound(Gear^.X))); |
227 Gear^.dX:= Gear^.Elasticity * (Gear^.dX + _0_000004 * (TargetPoint.X - hwRound(Gear^.X))); |
227 Gear^.dY:= Gear^.Elasticity * (Gear^.dY + _0_000004 * (TargetPoint.Y - hwRound(Gear^.Y))); |
228 Gear^.dY:= Gear^.Elasticity * (Gear^.dY + _0_000004 * (TargetPoint.Y - hwRound(Gear^.Y))); |
228 t:= t / Distance(Gear^.dX, Gear^.dY); |
229 t:= t / Distance(Gear^.dX, Gear^.dY); |
229 Gear^.dX:= Gear^.dX * t; |
230 Gear^.dX:= Gear^.dX * t; |
230 Gear^.dY:= Gear^.dY * t; |
231 Gear^.dY:= Gear^.dY * t; |
231 Gear^.X:= Gear^.X + Gear^.dX; |
232 Gear^.X:= Gear^.X + Gear^.dX; |
232 Gear^.Y:= Gear^.Y + Gear^.dY; |
233 Gear^.Y:= Gear^.Y + Gear^.dY; |
|
234 |
|
235 if (GameTicks and $3F) = 0 then |
|
236 begin |
|
237 y:= hwRound(Gear^.Y); |
|
238 if y + Gear^.Radius < cWaterLine then |
|
239 AddGear(hwRound(Gear^.X), y, gtSmokeTrace, 0, 0, 0, 0); |
|
240 end; |
|
241 |
233 CheckCollision(Gear); |
242 CheckCollision(Gear); |
234 dec(Gear^.Timer); |
243 dec(Gear^.Timer); |
235 if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then |
244 if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then |
236 begin |
245 begin |
237 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound); |
246 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound); |