hedgewars/uGearsHandlersMess.pas
changeset 9766 62c49992b049
parent 9742 419e5c651870
child 9767 17df4c8201f6
equal deleted inserted replaced
9765:6cad4393a315 9766:62c49992b049
   970             end;
   970             end;
   971         end;
   971         end;
   972 
   972 
   973 
   973 
   974     if Gear^.Timer = 0 then
   974     if Gear^.Timer = 0 then
   975         Gear^.RenderTimer:= false
   975         begin
       
   976         // no "fuel"? just fall
       
   977         doStepFallingGear(Gear);
       
   978         // if drowning, stop bee sound
       
   979         if (Gear^.State and gstDrowning) <> 0 then
       
   980             StopSoundChan(Gear^.SoundChannel);
       
   981         end
   976     else
   982     else
   977         begin
   983         begin
   978         if (GameTicks and $F) = 0 then
   984         if (GameTicks and $F) = 0 then
   979             begin
   985             begin
   980             if (GameTicks and $30) = 0 then
   986             if (GameTicks and $30) = 0 then
   981                 AddVisualGear(gX, gY, vgtBeeTrace);
   987                 begin
       
   988                 if nuw then
       
   989                     AddVisualGear(gX, gY, vgtBubble)
       
   990                 else
       
   991                     AddVisualGear(gX, gY, vgtBeeTrace);
       
   992                 end;
   982             Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (Gear^.Target.X - gX));
   993             Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (Gear^.Target.X - gX));
   983             Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (Gear^.Target.Y - gY));
   994             Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (Gear^.Target.Y - gY));
   984             // make sure new speed isn't higher than original one (which we stored in Friction variable)
   995             // make sure new speed isn't higher than original one (which we stored in Friction variable)
   985             t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY);
   996             t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY);
   986             Gear^.dX := Gear^.dX * t;
   997             Gear^.dX := Gear^.dX * t;
  1017             end;
  1028             end;
  1018         DeleteGear(Gear);
  1029         DeleteGear(Gear);
  1019     end;
  1030     end;
  1020 
  1031 
  1021     if (Gear^.Timer > 0) then
  1032     if (Gear^.Timer > 0) then
  1022         dec(Gear^.Timer)
  1033         begin
  1023     else
  1034         dec(Gear^.Timer);
  1024         begin
  1035         if Gear^.Timer = 0 then
  1025         Gear^.State:= Gear^.State and not gstSubmersible;
  1036             begin
  1026         if nuw then
  1037             // no need to display remaining time anymore
  1027            begin
  1038             Gear^.RenderTimer:= false;
  1028             StopSoundChan(Gear^.SoundChannel);
  1039             // bee can drown when timer reached 0
  1029             CheckGearDrowning(Gear);
  1040             Gear^.State:= Gear^.State and not gstSubmersible;
  1030             end
  1041             end;
  1031         else
       
  1032             doStepFallingGear(Gear);
       
  1033         end;
  1042         end;
  1034 end;
  1043 end;
  1035 
  1044 
  1036 procedure doStepBee(Gear: PGear);
  1045 procedure doStepBee(Gear: PGear);
  1037 begin
  1046 begin