hedgewars/uGearsHandlersMess.pas
changeset 10591 9a9f0cbb10b2
parent 10589 98ea597e5cd9
child 10597 9374770c3485
equal deleted inserted replaced
10590:3c649bf438a3 10591:9a9f0cbb10b2
  2125 procedure doStepFlame(Gear: PGear);
  2125 procedure doStepFlame(Gear: PGear);
  2126 var
  2126 var
  2127     gX,gY,i: LongInt;
  2127     gX,gY,i: LongInt;
  2128     sticky: Boolean;
  2128     sticky: Boolean;
  2129     vgt: PVisualGear;
  2129     vgt: PVisualGear;
  2130     tdX,tdY: HWFloat;
  2130     tdX,tdY, f: HWFloat;
  2131     landPixel: Word;
  2131     landPixel: Word;
  2132 begin
  2132 begin
  2133     WorldWrap(Gear);
  2133     WorldWrap(Gear);
  2134     if Gear^.FlightTime > 0 then dec(Gear^.FlightTime);
  2134     if Gear^.FlightTime > 0 then dec(Gear^.FlightTime);
  2135     sticky:= (Gear^.State and gsttmpFlag) <> 0;
  2135     sticky:= (Gear^.State and gsttmpFlag) <> 0;
  2164                 vgt^.dy:= 0;
  2164                 vgt^.dy:= 0;
  2165                 vgt^.FrameTicks:= 1800 div (Gear^.Tag mod 3 + 2);
  2165                 vgt^.FrameTicks:= 1800 div (Gear^.Tag mod 3 + 2);
  2166                 end;
  2166                 end;
  2167             end;
  2167             end;
  2168 
  2168 
  2169 
  2169         if (Gear^.dX.QWordValue > _2.QWordValue)
  2170         if Gear^.dX.QWordValue > _0_01.QWordValue then
  2170             or (Gear^.dY.QWordValue > _2.QWordValue)
  2171             Gear^.dX := Gear^.dX * _0_995;
  2171         then
  2172 
  2172         begin
  2173         Gear^.dY := Gear^.dY + cGravity;
  2173             // norm speed vector to length of 2 for fire particles to keep flying in the same direction
  2174         // if sticky then Gear^.dY := Gear^.dY + cGravity;
  2174             f:= _2 / Distance(Gear^.dX, Gear^.dY);
  2175 
  2175             Gear^.dX:= Gear^.dX * f;
  2176         if Gear^.dY.QWordValue > _0_2.QWordValue then
  2176             Gear^.dY:= Gear^.dY * f;
  2177             Gear^.dY := Gear^.dY * _0_995;
  2177         end
  2178 
  2178         else begin
  2179         //if sticky then Gear^.X := Gear^.X + Gear^.dX else
  2179             if Gear^.dX.QWordValue > _0_01.QWordValue then
  2180         Gear^.X := Gear^.X + Gear^.dX + cWindSpeed * 640;
  2180                 if Gear^.dX.QWordValue > _2.QWordValue then
  2181         Gear^.Y := Gear^.Y + Gear^.dY;
  2181                     Gear^.dX := Gear^.dX * _0_995;
       
  2182 
       
  2183             Gear^.dY := Gear^.dY + cGravity;
       
  2184             // if sticky then Gear^.dY := Gear^.dY + cGravity;
       
  2185 
       
  2186             if Gear^.dY.QWordValue > _0_2.QWordValue then
       
  2187                 Gear^.dY := Gear^.dY * _0_995;
       
  2188 
       
  2189             //if sticky then Gear^.X := Gear^.X + Gear^.dX else
       
  2190             Gear^.X := Gear^.X + Gear^.dX + cWindSpeed * 640;
       
  2191             Gear^.Y := Gear^.Y + Gear^.dY;
       
  2192         end;
  2182 
  2193 
  2183         gX := hwRound(Gear^.X);
  2194         gX := hwRound(Gear^.X);
  2184         gY := hwRound(Gear^.Y);
  2195         gY := hwRound(Gear^.Y);
  2185 
  2196 
  2186         if CheckCoordInWater(gX, gY) then
  2197         if CheckCoordInWater(gX, gY) then