hedgewars/uVisualGearsHandlers.pas
changeset 10354 56bd029245fc
parent 10299 45e3e901b3b9
child 10355 334b5f513703
equal deleted inserted replaced
10352:2af2309207b0 10354:56bd029245fc
    73 
    73 
    74 function isSorterActive: boolean; inline;
    74 function isSorterActive: boolean; inline;
    75 procedure initModule;
    75 procedure initModule;
    76 
    76 
    77 implementation
    77 implementation
    78 uses uVariables, Math, uConsts, uVisualGearsList, uFloat, uSound, uRenderUtils, uWorld;
    78 uses uCollisions, uVariables, Math, uConsts, uVisualGearsList, uFloat, uSound, uRenderUtils, uWorld;
    79 
    79 
    80 procedure doStepFlake(Gear: PVisualGear; Steps: Longword);
    80 procedure doStepFlake(Gear: PVisualGear; Steps: Longword);
    81 var sign: real;
    81 var sign: real;
    82     moved: boolean;
    82     moved: boolean;
    83 begin
    83 begin
   343 Gear^.Y:= Gear^.Y + Gear^.dY * Steps;
   343 Gear^.Y:= Gear^.Y + Gear^.dY * Steps;
   344 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps;
   344 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps;
   345 Gear^.dX := Gear^.dX / (1.001 * Steps);
   345 Gear^.dX := Gear^.dX / (1.001 * Steps);
   346 Gear^.dY := Gear^.dY / (1.001 * Steps);
   346 Gear^.dY := Gear^.dY / (1.001 * Steps);
   347 
   347 
   348 if (Gear^.FrameTicks <= Steps) or (round(Gear^.Y) < cWaterLine) then
   348 if (Gear^.FrameTicks <= Steps) or not CheckCoordInWater(round(Gear^.X), round(Gear^.Y)) then
   349     DeleteVisualGear(Gear)
   349     DeleteVisualGear(Gear)
   350 else
   350 else
   351     dec(Gear^.FrameTicks, Steps)
   351     dec(Gear^.FrameTicks, Steps)
   352 end;
   352 end;
   353 
   353 
   354 ////////////////////////////////////////////////////////////////////////////////
   354 ////////////////////////////////////////////////////////////////////////////////
   355 procedure doStepSteam(Gear: PVisualGear; Steps: Longword);
   355 procedure doStepSteam(Gear: PVisualGear; Steps: Longword);
   356 begin
   356 begin
   357 Gear^.X:= Gear^.X + (cWindSpeedf * 100 + Gear^.dX) * Steps;
   357 if ((cWindSpeedf > 0) and ( leftX > Gear^.X))
       
   358 or ((cWindSpeedf < 0) and (rightX < Gear^.X)) then
       
   359     Gear^.X:= Gear^.X + (cWindSpeedf * 100 + Gear^.dX) * Steps;
   358 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps;
   360 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps;
   359 
   361 
   360 if Gear^.FrameTicks <= Steps then
   362 if Gear^.FrameTicks <= Steps then
   361     if Gear^.Frame = 0 then
   363     if Gear^.Frame = 0 then
   362         DeleteVisualGear(Gear)
   364         DeleteVisualGear(Gear)