456 CheckGearDrowning(Gear); |
456 CheckGearDrowning(Gear); |
457 Gear^.dY:= Gear^.dY + cGravity |
457 Gear^.dY:= Gear^.dY + cGravity |
458 end; |
458 end; |
459 |
459 |
460 //////////////////////////////////////////////////////////////////////////////// |
460 //////////////////////////////////////////////////////////////////////////////// |
461 procedure doStepUFOWork(Gear: PGear); |
461 procedure doStepBeeWork(Gear: PGear); |
462 var t: hwFloat; |
462 var t: hwFloat; |
463 y: LongInt; |
|
464 begin |
463 begin |
465 AllInactive:= false; |
464 AllInactive:= false; |
466 t:= Distance(Gear^.dX, Gear^.dY); |
465 t:= Distance(Gear^.dX, Gear^.dY); |
467 Gear^.dX:= Gear^.Elasticity * (Gear^.dX + _0_000004 * (TargetPoint.X - hwRound(Gear^.X))); |
466 Gear^.dX:= Gear^.Elasticity * (Gear^.dX + _0_000004 * (TargetPoint.X - hwRound(Gear^.X))); |
468 Gear^.dY:= Gear^.Elasticity * (Gear^.dY + _0_000004 * (TargetPoint.Y - hwRound(Gear^.Y))); |
467 Gear^.dY:= Gear^.Elasticity * (Gear^.dY + _0_000004 * (TargetPoint.Y - hwRound(Gear^.Y))); |
|
468 |
469 t:= t / Distance(Gear^.dX, Gear^.dY); |
469 t:= t / Distance(Gear^.dX, Gear^.dY); |
470 Gear^.dX:= Gear^.dX * t; |
470 Gear^.dX:= Gear^.dX * t; |
471 Gear^.dY:= Gear^.dY * t; |
471 Gear^.dY:= Gear^.dY * t; |
472 Gear^.X:= Gear^.X + Gear^.dX; |
472 Gear^.X:= Gear^.X + Gear^.dX; |
473 Gear^.Y:= Gear^.Y + Gear^.dY; |
473 Gear^.Y:= Gear^.Y + Gear^.dY; |
474 |
474 |
475 if (GameTicks and $3F) = 0 then |
475 if (GameTicks and $3F) = 0 then |
476 begin |
476 begin |
477 y:= hwRound(Gear^.Y); |
477 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBeeTrace); |
478 if y + Gear^.Radius < cWaterLine then |
|
479 AddGear(hwRound(Gear^.X), y, gtSmokeTrace, 0, _0, _0, 0); |
|
480 end; |
478 end; |
481 |
479 |
482 CheckCollision(Gear); |
480 CheckCollision(Gear); |
483 dec(Gear^.Timer); |
481 dec(Gear^.Timer); |
484 if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then |
482 if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then |
487 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound); |
485 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound); |
488 DeleteGear(Gear); |
486 DeleteGear(Gear); |
489 end; |
487 end; |
490 end; |
488 end; |
491 |
489 |
492 procedure doStepUFO(Gear: PGear); |
490 procedure doStepBee(Gear: PGear); |
493 begin |
491 begin |
494 AllInactive:= false; |
492 AllInactive:= false; |
495 Gear^.X:= Gear^.X + Gear^.dX; |
493 Gear^.X:= Gear^.X + Gear^.dX; |
496 Gear^.Y:= Gear^.Y + Gear^.dY; |
494 Gear^.Y:= Gear^.Y + Gear^.dY; |
497 Gear^.dY:= Gear^.dY + cGravity; |
495 Gear^.dY:= Gear^.dY + cGravity; |
503 exit |
501 exit |
504 end; |
502 end; |
505 dec(Gear^.Timer); |
503 dec(Gear^.Timer); |
506 if Gear^.Timer = 0 then |
504 if Gear^.Timer = 0 then |
507 begin |
505 begin |
508 Gear^.SoundChannel:= LoopSound(sndUFO); |
506 Gear^.SoundChannel:= LoopSound(sndBee); |
509 Gear^.Timer:= 5000; |
507 Gear^.Timer:= 5000; |
510 Gear^.doStep:= @doStepUFOWork |
508 Gear^.doStep:= @doStepBeeWork |
511 end; |
509 end; |
512 end; |
510 end; |
513 |
511 |
514 //////////////////////////////////////////////////////////////////////////////// |
512 //////////////////////////////////////////////////////////////////////////////// |
515 procedure doStepShotIdle(Gear: PGear); |
513 procedure doStepShotIdle(Gear: PGear); |