hedgewars/uGearsHandlersMess.pas
changeset 15598 d275bb6b85b4
parent 15597 6e72bd61002e
parent 15595 b988d3be7100
child 15623 6c689729b745
equal deleted inserted replaced
15597:6e72bd61002e 15598:d275bb6b85b4
  1847     BTPrevAngle, BTSteps: LongInt;
  1847     BTPrevAngle, BTSteps: LongInt;
  1848 
  1848 
  1849 procedure doStepBlowTorchWork(Gear: PGear);
  1849 procedure doStepBlowTorchWork(Gear: PGear);
  1850 var
  1850 var
  1851     HHGear: PGear;
  1851     HHGear: PGear;
  1852     b: boolean;
  1852     dig: boolean;
  1853     prevX: LongInt;
  1853     prevX: LongInt;
  1854 begin
  1854 begin
  1855     AllInactive := false;
  1855     AllInactive := false;
  1856     WorldWrap(Gear);
  1856     WorldWrap(Gear);
  1857     dec(Gear^.Timer);
  1857     dec(Gear^.Timer);
  1866 
  1866 
  1867     HHGear := Gear^.Hedgehog^.Gear;
  1867     HHGear := Gear^.Hedgehog^.Gear;
  1868 
  1868 
  1869     HedgehogChAngle(HHGear);
  1869     HedgehogChAngle(HHGear);
  1870 
  1870 
  1871     b := false;
  1871     dig := false;
  1872 
  1872 
  1873     if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7  then
  1873     if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7  then
  1874         begin
  1874         begin
  1875         Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX);
  1875         Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX);
  1876         Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5);
  1876         Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5);
  1877         BTPrevAngle := HHGear^.Angle;
  1877         BTPrevAngle := HHGear^.Angle;
  1878         b := true
  1878         dig := true
  1879         end;
  1879         end;
  1880 
  1880 
  1881     if ((HHGear^.State and gstMoving) <> 0) then
  1881     if ((HHGear^.State and gstMoving) <> 0) then
  1882         begin
  1882         begin
  1883         doStepHedgehogMoving(HHGear);
  1883         doStepHedgehogMoving(HHGear);
  1885             Gear^.Timer := 0
  1885             Gear^.Timer := 0
  1886         end;
  1886         end;
  1887 
  1887 
  1888     if Gear^.Timer mod cHHStepTicks = 0 then
  1888     if Gear^.Timer mod cHHStepTicks = 0 then
  1889         begin
  1889         begin
  1890         b := true;
  1890         dig := true;
  1891         if Gear^.dX.isNegative then
  1891         if Gear^.dX.isNegative then
  1892             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft
  1892             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft
  1893         else
  1893         else
  1894             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight;
  1894             HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight;
  1895 
  1895 
  1896         if ((HHGear^.State and gstMoving) = 0) then
  1896         if ((HHGear^.State and gstMoving) = 0) then
  1897             begin
  1897             begin
  1898             HHGear^.State := HHGear^.State and (not gstAttacking);
  1898             HHGear^.State := HHGear^.State and (not gstAttacking);
  1899             prevX := hwRound(HHGear^.X);
  1899             prevX := hwRound(HHGear^.X);
  1900 
  1900 
  1901             // why the call to HedgehogStep then a further increment of X?
  1901             if CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y),lfIndestructible) then
  1902             if (prevX = hwRound(HHGear^.X)) and
  1902                 begin
  1903                CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y),
  1903                 HedgehogStep(HHGear);
  1904                lfIndestructible) then HedgehogStep(HHGear);
  1904                 if (prevX = hwRound(HHGear^.X)) then
  1905 
  1905                     HHGear^.X := HHGear^.X + SignAs(_1, HHGear^.dX);
  1906             if (prevX = hwRound(HHGear^.X)) and
  1906                 end;
  1907                CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y),
  1907 
  1908                lfIndestructible) then HHGear^.X := HHGear^.X + SignAs(_1, HHGear^.dX);
       
  1909             HHGear^.State := HHGear^.State or gstAttacking
  1908             HHGear^.State := HHGear^.State or gstAttacking
  1910             end;
  1909             end;
  1911 
  1910 
  1912         inc(BTSteps);
  1911         inc(BTSteps);
  1913         if BTSteps = 7 then
  1912         if BTSteps = 7 then
  1922             AmmoShove(Gear, Gear^.Boom, 15);
  1921             AmmoShove(Gear, Gear^.Boom, 15);
  1923             HHGear^.State := HHGear^.State and (not gstNoDamage)
  1922             HHGear^.State := HHGear^.State and (not gstNoDamage)
  1924             end;
  1923             end;
  1925         end;
  1924         end;
  1926 
  1925 
  1927     if b then
  1926     if dig then
  1928         begin
  1927         begin
  1929         DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius,
  1928         DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius,
  1930         HHGear^.Y + Gear^.dY * cHHRadius - _1 -
  1929         HHGear^.Y + Gear^.dY * cHHRadius - _1 -
  1931         ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7),
  1930         ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7),
  1932         Gear^.dX, Gear^.dY,
  1931         Gear^.dX, Gear^.dY,