hedgewars/uGearsHandlersMess.pas
changeset 10352 2af2309207b0
parent 10298 7d5d93f9a515
child 10354 56bd029245fc
equal deleted inserted replaced
10351:0eff41e9f63f 10352:2af2309207b0
   671 
   671 
   672     if (Gear^.Kind = gtMelonPiece)
   672     if (Gear^.Kind = gtMelonPiece)
   673     or (Gear^.Kind = gtBall) then
   673     or (Gear^.Kind = gtBall) then
   674         CalcRotationDirAngle(Gear)
   674         CalcRotationDirAngle(Gear)
   675     else if (GameTicks and $1F) = 0 then
   675     else if (GameTicks and $1F) = 0 then
   676         begin
   676         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
   677         if hwRound(Gear^.Y) > cWaterLine then
       
   678              AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
       
   679         else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
       
   680         end
       
   681 end;
   677 end;
   682 
   678 
   683 ////////////////////////////////////////////////////////////////////////////////
   679 ////////////////////////////////////////////////////////////////////////////////
   684 procedure doStepShell(Gear: PGear);
   680 procedure doStepShell(Gear: PGear);
   685 begin
   681 begin
   692         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound);
   688         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound);
   693         DeleteGear(Gear);
   689         DeleteGear(Gear);
   694         exit
   690         exit
   695         end;
   691         end;
   696     if (GameTicks and $3F) = 0 then
   692     if (GameTicks and $3F) = 0 then
   697         begin
   693         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
   698         if hwRound(Gear^.Y) > cWaterLine then
       
   699              AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
       
   700         else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
       
   701         end
       
   702 end;
   694 end;
   703 
   695 
   704 ////////////////////////////////////////////////////////////////////////////////
   696 ////////////////////////////////////////////////////////////////////////////////
   705 procedure doStepSnowball(Gear: PGear);
   697 procedure doStepSnowball(Gear: PGear);
   706 var kick, i: LongInt;
   698 var kick, i: LongInt;
   999     else
   991     else
  1000         begin
   992         begin
  1001         if (GameTicks and $F) = 0 then
   993         if (GameTicks and $F) = 0 then
  1002             begin
   994             begin
  1003             if (GameTicks and $30) = 0 then
   995             if (GameTicks and $30) = 0 then
  1004                 begin
   996                 AddVisualGear(gX, gY, vgtBeeTrace);
  1005                 if nuw then
   997 
  1006                     AddVisualGear(gX, gY, vgtBubble)
       
  1007                 else
       
  1008                     AddVisualGear(gX, gY, vgtBeeTrace);
       
  1009                 end;
       
  1010             Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (Gear^.Target.X - gX));
   998             Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (Gear^.Target.X - gX));
  1011             Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (Gear^.Target.Y - gY));
   999             Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (Gear^.Target.Y - gY));
  1012             // make sure new speed isn't higher than original one (which we stored in Friction variable)
  1000             // make sure new speed isn't higher than original one (which we stored in Friction variable)
  1013             t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY);
  1001             t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY);
  1014             Gear^.dX := Gear^.dX * t;
  1002             Gear^.dX := Gear^.dX * t;
  2763         DeleteGear(Gear);
  2751         DeleteGear(Gear);
  2764         exit
  2752         exit
  2765         end;
  2753         end;
  2766 
  2754 
  2767     if (GameTicks and $3F) = 0 then
  2755     if (GameTicks and $3F) = 0 then
  2768         begin
  2756         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  2769         if hwRound(Gear^.Y) > cWaterLine then
       
  2770              AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
       
  2771         else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
       
  2772         end
       
  2773 end;
  2757 end;
  2774 
  2758 
  2775 ////////////////////////////////////////////////////////////////////////////////
  2759 ////////////////////////////////////////////////////////////////////////////////
  2776 procedure doStepKamikazeWork(Gear: PGear);
  2760 procedure doStepKamikazeWork(Gear: PGear);
  2777 var
  2761 var
  3268     oldY := Gear^.Y;
  3252     oldY := Gear^.Y;
  3269 
  3253 
  3270     doStepFallingGear(Gear);
  3254     doStepFallingGear(Gear);
  3271 
  3255 
  3272     if (GameTicks and $3F) = 0 then
  3256     if (GameTicks and $3F) = 0 then
  3273         begin
  3257         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  3274         if hwRound(Gear^.Y) > cWaterLine then
       
  3275              AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
       
  3276         else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
       
  3277         end;
       
  3278 
  3258 
  3279     if ((Gear^.State and gstCollision) <> 0) then
  3259     if ((Gear^.State and gstCollision) <> 0) then
  3280         begin
  3260         begin
  3281         //hit
  3261         //hit
  3282         Gear^.dX := oldDx;
  3262         Gear^.dX := oldDx;