hedgewars/uGearsHandlersRope.pas
changeset 9526 2fd51591b260
parent 9473 a51a69094c24
child 9571 273567816538
equal deleted inserted replaced
9524:0a52c1dd9400 9526:2fd51591b260
    29     uAmmos, uDebug, uUtils, uGearsHedgehog, uGearsRender;
    29     uAmmos, uDebug, uUtils, uGearsHedgehog, uGearsRender;
    30 
    30 
    31 procedure doStepRopeAfterAttack(Gear: PGear);
    31 procedure doStepRopeAfterAttack(Gear: PGear);
    32 var 
    32 var 
    33     HHGear: PGear;
    33     HHGear: PGear;
       
    34     tX:     hwFloat;
    34 begin
    35 begin
    35     HHGear := Gear^.Hedgehog^.Gear;
    36     HHGear := Gear^.Hedgehog^.Gear;
    36     WorldWrap(HHGear);
    37     tX:= HHGear^.X;
       
    38     if WorldWrap(HHGear) and (WorldEdge = weWrap) and 
       
    39        (TestCollisionXwithGear(HHGear, 1) or TestCollisionXwithGear(HHGear, -1))  then
       
    40         begin
       
    41         HHGear^.X:= tX;
       
    42         HHGear^.dX.isNegative:= (hwRound(tX) > leftX+HHGear^.Radius*2)
       
    43         end;
       
    44 
    37     if (HHGear^.Hedgehog^.CurAmmoType = amParachute) and (HHGear^.dY > _0_39) then
    45     if (HHGear^.Hedgehog^.CurAmmoType = amParachute) and (HHGear^.dY > _0_39) then
    38         begin
    46         begin
    39         DeleteGear(Gear);
    47         DeleteGear(Gear);
    40         ApplyAmmoChanges(HHGear^.Hedgehog^);
    48         ApplyAmmoChanges(HHGear^.Hedgehog^);
    41         HHGear^.Message:= HHGear^.Message or gmLJump;
    49         HHGear^.Message:= HHGear^.Message or gmLJump;
   115 begin
   123 begin
   116     if GameTicks mod 4 <> 0 then exit;
   124     if GameTicks mod 4 <> 0 then exit;
   117 
   125 
   118     HHGear := Gear^.Hedgehog^.Gear;
   126     HHGear := Gear^.Hedgehog^.Gear;
   119 
   127 
   120     if ((HHGear^.State and gstHHDriven) = 0) or WorldWrap(HHGear)
   128     tX:= HHGear^.X;
   121        or (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then
   129     if WorldWrap(HHGear) and (WorldEdge = weWrap) and 
       
   130        (TestCollisionXwithGear(HHGear, 1) or TestCollisionXwithGear(HHGear, -1))  then
       
   131         begin
       
   132         PlaySound(sndRopeRelease);
       
   133         RopeDeleteMe(Gear, HHGear);
       
   134         HHGear^.X:= tX;
       
   135         HHGear^.dX.isNegative:= (hwRound(tX) > leftX+HHGear^.Radius*2);
       
   136         exit
       
   137         end;
       
   138 
       
   139     tX:= HHGear^.X;
       
   140     if ((HHGear^.State and gstHHDriven) = 0) or
       
   141         (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then
   122         begin
   142         begin
   123         PlaySound(sndRopeRelease);
   143         PlaySound(sndRopeRelease);
   124         RopeDeleteMe(Gear, HHGear);
   144         RopeDeleteMe(Gear, HHGear);
   125         exit
   145         exit
   126         end;
   146         end;