hedgewars/uGearsHandlersMess.pas
changeset 14006 105793e575d6
parent 14005 31bdb759d98b
child 14007 cfbea054754c
equal deleted inserted replaced
14005:31bdb759d98b 14006:105793e575d6
  2812         begin
  2812         begin
  2813         Gear^.Tag := hwRound(HHGear^.Y);
  2813         Gear^.Tag := hwRound(HHGear^.Y);
  2814         DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4+2, 2);
  2814         DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4+2, 2);
  2815         HHGear^.State := HHGear^.State or gstNoDamage;
  2815         HHGear^.State := HHGear^.State or gstNoDamage;
  2816         Gear^.Y := HHGear^.Y;
  2816         Gear^.Y := HHGear^.Y;
  2817         AmmoShove(Gear, Gear^.Boom, 40);
  2817         AmmoShoveCache(Gear, Gear^.Boom, 40);
  2818         HHGear^.State := HHGear^.State and (not gstNoDamage)
  2818         HHGear^.State := HHGear^.State and (not gstNoDamage)
  2819         end;
  2819         end;
  2820 
  2820 
  2821     HHGear^.dY := HHGear^.dY + cGravity;
  2821     HHGear^.dY := HHGear^.dY + cGravity;
  2822     if Gear^.Timer > 0 then dec(Gear^.Timer);
  2822     if Gear^.Timer > 0 then dec(Gear^.Timer);
  2823     if not (HHGear^.dY.isNegative) or (Gear^.Timer = 0) then
  2823     if not (HHGear^.dY.isNegative) or (Gear^.Timer = 0) then
  2824         begin
  2824         begin
  2825         HHGear^.State := HHGear^.State or gstMoving;
  2825         HHGear^.State := HHGear^.State or gstMoving;
  2826         ClearHitOrder();
  2826         ClearHitOrder();
       
  2827         ClearProximityCache();
  2827         DeleteGear(Gear);
  2828         DeleteGear(Gear);
  2828         AfterAttack;
  2829         AfterAttack;
  2829         exit
  2830         exit
  2830         end;
  2831         end;
  2831 
  2832 
  2832     if CheckLandValue(hwRound(HHGear^.X), hwRound(HHGear^.Y + HHGear^.dY + SignAs(_6,Gear^.dY)),
  2833     if CheckLandValue(hwRound(HHGear^.X), hwRound(HHGear^.Y + HHGear^.dY + SignAs(_6,Gear^.dY)),
  2833         lfIndestructible) then
  2834         lfIndestructible) then
  2834             HHGear^.Y := HHGear^.Y + HHGear^.dY
  2835             HHGear^.Y := HHGear^.Y + HHGear^.dY;
       
  2836 
       
  2837     if (Gear^.Timer mod 200) = 0 then
       
  2838         RefillProximityCache(Gear, 300);
  2835 end;
  2839 end;
  2836 
  2840 
  2837 procedure doStepFirePunch(Gear: PGear);
  2841 procedure doStepFirePunch(Gear: PGear);
  2838 var
  2842 var
  2839     HHGear: PGear;
  2843     HHGear: PGear;
  2845     HHGear^.dX := SignAs(cLittle, Gear^.dX);
  2849     HHGear^.dX := SignAs(cLittle, Gear^.dX);
  2846 
  2850 
  2847     HHGear^.dY := - _0_3;
  2851     HHGear^.dY := - _0_3;
  2848 
  2852 
  2849     ClearHitOrder();
  2853     ClearHitOrder();
       
  2854     RefillProximityCache(Gear, 300);
  2850 
  2855 
  2851     Gear^.X := HHGear^.X;
  2856     Gear^.X := HHGear^.X;
  2852     Gear^.dX := SignAs(_0_45, Gear^.dX);
  2857     Gear^.dX := SignAs(_0_45, Gear^.dX);
  2853     Gear^.dY := - _0_9;
  2858     Gear^.dY := - _0_9;
  2854     Gear^.doStep := @doStepFirePunchWork;
  2859     Gear^.doStep := @doStepFirePunchWork;