hedgewars/GSHandlers.inc
changeset 3080 b7fa8ad60e3b
parent 3075 b4ef08187d22
child 3081 27170e35d9ef
equal deleted inserted replaced
3079:8deb4e8f5172 3080:b7fa8ad60e3b
   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);