hedgewars/uGearsHandlersMess.pas
changeset 15595 b988d3be7100
parent 15587 61f2ffcd5652
child 15598 d275bb6b85b4
child 15620 106d7162caea
equal deleted inserted replaced
15594:fdca2af677a9 15595:b988d3be7100
  1840     BTPrevAngle, BTSteps: LongInt;
  1840     BTPrevAngle, BTSteps: LongInt;
  1841 
  1841 
  1842 procedure doStepBlowTorchWork(Gear: PGear);
  1842 procedure doStepBlowTorchWork(Gear: PGear);
  1843 var
  1843 var
  1844     HHGear: PGear;
  1844     HHGear: PGear;
  1845     b: boolean;
  1845     dig: boolean;
  1846     prevX: LongInt;
  1846     prevX: LongInt;
  1847 begin
  1847 begin
  1848     AllInactive := false;
  1848     AllInactive := false;
  1849     WorldWrap(Gear);
  1849     WorldWrap(Gear);
  1850     dec(Gear^.Timer);
  1850     dec(Gear^.Timer);
  1859 
  1859 
  1860     HHGear := Gear^.Hedgehog^.Gear;
  1860     HHGear := Gear^.Hedgehog^.Gear;
  1861 
  1861 
  1862     HedgehogChAngle(HHGear);
  1862     HedgehogChAngle(HHGear);
  1863 
  1863 
  1864     b := false;
  1864     dig := false;
  1865 
  1865 
  1866     if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7  then
  1866     if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7  then
  1867         begin
  1867         begin
  1868         Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX);
  1868         Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX);
  1869         Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5);
  1869         Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5);
  1870         BTPrevAngle := HHGear^.Angle;
  1870         BTPrevAngle := HHGear^.Angle;
  1871         b := true
  1871         dig := true
  1872         end;
  1872         end;
  1873 
  1873 
  1874     if ((HHGear^.State and gstMoving) <> 0) then
  1874     if ((HHGear^.State and gstMoving) <> 0) then
  1875         begin
  1875         begin
  1876         doStepHedgehogMoving(HHGear);
  1876         doStepHedgehogMoving(HHGear);
  1878             Gear^.Timer := 0
  1878             Gear^.Timer := 0
  1879         end;
  1879         end;
  1880 
  1880 
  1881     if Gear^.Timer mod cHHStepTicks = 0 then
  1881     if Gear^.Timer mod cHHStepTicks = 0 then
  1882         begin
  1882         begin
  1883         b := true;
  1883         dig := true;
  1884         if Gear^.dX.isNegative then
  1884         if Gear^.dX.isNegative then
  1885             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft
  1885             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft
  1886         else
  1886         else
  1887             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight;
  1887             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight;
  1888 
  1888 
  1889         if ((HHGear^.State and gstMoving) = 0) then
  1889         if ((HHGear^.State and gstMoving) = 0) then
  1890             begin
  1890             begin
  1891             HHGear^.State := HHGear^.State and (not gstAttacking);
  1891             HHGear^.State := HHGear^.State and (not gstAttacking);
  1892             prevX := hwRound(HHGear^.X);
  1892             prevX := hwRound(HHGear^.X);
  1893 
  1893 
  1894             // why the call to HedgehogStep then a further increment of X?
  1894             if CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y),lfIndestructible) then
  1895             if (prevX = hwRound(HHGear^.X)) and
  1895                 begin
  1896                CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y),
  1896                 HedgehogStep(HHGear);
  1897                lfIndestructible) then HedgehogStep(HHGear);
  1897                 if (prevX = hwRound(HHGear^.X)) then
  1898 
  1898                     HHGear^.X := HHGear^.X + SignAs(_1, HHGear^.dX);
  1899             if (prevX = hwRound(HHGear^.X)) and
  1899                 end;
  1900                CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y),
  1900 
  1901                lfIndestructible) then HHGear^.X := HHGear^.X + SignAs(_1, HHGear^.dX);
       
  1902             HHGear^.State := HHGear^.State or gstAttacking
  1901             HHGear^.State := HHGear^.State or gstAttacking
  1903             end;
  1902             end;
  1904 
  1903 
  1905         inc(BTSteps);
  1904         inc(BTSteps);
  1906         if BTSteps = 7 then
  1905         if BTSteps = 7 then
  1915             AmmoShove(Gear, Gear^.Boom, 15);
  1914             AmmoShove(Gear, Gear^.Boom, 15);
  1916             HHGear^.State := HHGear^.State and (not gstNoDamage)
  1915             HHGear^.State := HHGear^.State and (not gstNoDamage)
  1917             end;
  1916             end;
  1918         end;
  1917         end;
  1919 
  1918 
  1920     if b then
  1919     if dig then
  1921         begin
  1920         begin
  1922         DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius,
  1921         DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius,
  1923         HHGear^.Y + Gear^.dY * cHHRadius - _1 -
  1922         HHGear^.Y + Gear^.dY * cHHRadius - _1 -
  1924         ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7),
  1923         ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7),
  1925         Gear^.dX, Gear^.dY,
  1924         Gear^.dX, Gear^.dY,