hedgewars/HHHandlers.inc
changeset 513 69e06d710d46
parent 511 2b5b9e00419d
child 517 ba560c17c24c
equal deleted inserted replaced
512:efc640bb60d0 513:69e06d710d46
   326 ////////////////////////////////////////////////////////////////////////////////
   326 ////////////////////////////////////////////////////////////////////////////////
   327 procedure doStepHedgehogFree(Gear: PGear);
   327 procedure doStepHedgehogFree(Gear: PGear);
   328 var prevState: Longword;
   328 var prevState: Longword;
   329 begin
   329 begin
   330 prevState:= Gear^.State;
   330 prevState:= Gear^.State;
   331 if not TestCollisionYwithGear(Gear, 1) then
   331 if not TestCollisionYKick(Gear, 1) then
   332    begin
   332    begin
   333    if (Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, -1) then Gear^.dY:= _0;
   333    if (Gear^.dY.isNegative) and TestCollisionYKick(Gear, -1) then Gear^.dY:= _0;
   334    Gear^.State:= Gear^.State or gstFalling or gstMoving;
   334    Gear^.State:= Gear^.State or gstFalling or gstMoving;
   335    Gear^.dY:= Gear^.dY + cGravity
   335    Gear^.dY:= Gear^.dY + cGravity
   336    end else begin
   336    end else begin
   337    CheckHHDamage(Gear);
   337    CheckHHDamage(Gear);
   338    if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55)
   338    if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55)
   343    end;
   343    end;
   344 
   344 
   345 if (Gear^.State <> 0) then DeleteCI(Gear);
   345 if (Gear^.State <> 0) then DeleteCI(Gear);
   346 
   346 
   347 if (Gear^.State and gstMoving) <> 0 then
   347 if (Gear^.State and gstMoving) <> 0 then
   348    if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
   348    if TestCollisionXKick(Gear, hwSign(Gear^.dX)) then
   349       if ((Gear^.State and gstFalling) = 0) then
   349       if ((Gear^.State and gstFalling) = 0) then
   350          if hwAbs(Gear^.dX) > _0_01 then
   350          if hwAbs(Gear^.dX) > _0_01 then
   351             if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_96; Gear^.Y:= Gear^.Y - _1 end else
   351             if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_96; Gear^.Y:= Gear^.Y - _1 end else
   352             if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_93; Gear^.Y:= Gear^.Y - _2 end else
   352             if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_93; Gear^.Y:= Gear^.Y - _2 end else
   353             if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_9 ; Gear^.Y:= Gear^.Y - _3 end else
   353             if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_9 ; Gear^.Y:= Gear^.Y - _3 end else
   375 if (Gear^.State and gstMoving) <> 0 then
   375 if (Gear^.State and gstMoving) <> 0 then
   376    begin
   376    begin
   377    Gear^.State:= Gear^.State and not gstAnimation;
   377    Gear^.State:= Gear^.State and not gstAnimation;
   378    Gear^.X:= Gear^.X + Gear^.dX;
   378    Gear^.X:= Gear^.X + Gear^.dX;
   379    Gear^.Y:= Gear^.Y + Gear^.dY;
   379    Gear^.Y:= Gear^.Y + Gear^.dY;
   380    if (Gear^.dY > _0) and not TestCollisionYwithGear(Gear, 1) and TestCollisionYwithXYShift(Gear, 0, 1, 1) then
   380    if (not Gear^.dY.isNegative) and
       
   381       (not TestCollisionYKick(Gear, 1)) and
       
   382        TestCollisionYwithXYShift(Gear, 0, 1, 1) then
   381       begin
   383       begin
   382       CheckHHDamage(Gear);
   384       CheckHHDamage(Gear);
   383       Gear^.dY:= _0;
   385       Gear^.dY:= _0;
   384       Gear^.Y:= Gear^.Y + _1
   386       Gear^.Y:= Gear^.Y + _1
   385       end;
   387       end;