hedgewars/HHHandlers.inc
changeset 505 fcba7d7aea0d
parent 498 9c8b385dc9a1
child 511 2b5b9e00419d
equal deleted inserted replaced
504:13b6ebc53627 505:fcba7d7aea0d
   147              Pos:= (Pos + 1) mod Ammoz[AmmoType].PosCount
   147              Pos:= (Pos + 1) mod Ammoz[AmmoType].PosCount
   148           else exit;
   148           else exit;
   149           StepTicks:= 200;
   149           StepTicks:= 200;
   150           exit
   150           exit
   151           end;
   151           end;
       
   152 
   152    if ((Gear^.Message and gm_LJump ) <> 0) then
   153    if ((Gear^.Message and gm_LJump ) <> 0) then
   153       begin
   154       begin
   154       Gear^.Message:= 0;
   155       Gear^.Message:= 0;
       
   156       DeleteCI(Gear);
   155       if not TestCollisionYwithGear(Gear, -1) then
   157       if not TestCollisionYwithGear(Gear, -1) then
   156          if not TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - _2 else
   158          if not TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - _2 else
   157          if not TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - _1;
   159          if not TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - _1;
   158       if not (TestCollisionXwithGear(Gear, hwSign(Gear^.dX))
   160       if not (TestCollisionXwithGear(Gear, hwSign(Gear^.dX))
   159          or   TestCollisionYwithGear(Gear, -1)) then
   161          or   TestCollisionYwithGear(Gear, -1)) then
   162          Gear^.dX:= SignAs(_0_15, Gear^.dX);
   164          Gear^.dX:= SignAs(_0_15, Gear^.dX);
   163          Gear^.State:= Gear^.State or gstFalling or gstHHJumping;
   165          Gear^.State:= Gear^.State or gstFalling or gstHHJumping;
   164          exit
   166          exit
   165          end;
   167          end;
   166       end;
   168       end;
       
   169 
   167    if ((Gear^.Message and gm_HJump ) <> 0) then
   170    if ((Gear^.Message and gm_HJump ) <> 0) then
   168       begin
   171       begin
       
   172       DeleteCI(Gear);
   169       Gear^.Message:= 0;
   173       Gear^.Message:= 0;
   170       if not TestCollisionYwithGear(Gear, -1) then
   174       if not TestCollisionYwithGear(Gear, -1) then
   171          begin
   175          begin
   172          Gear^.dY:= -_0_2;
   176          Gear^.dY:= -_0_2;
   173          SetLittle(Gear^.dX);
   177          SetLittle(Gear^.dX);
   174          Gear^.State:= Gear^.State or gstFalling or gstHHJumping;
   178          Gear^.State:= Gear^.State or gstFalling or gstHHJumping;
   175          exit
   179          exit
   176          end;
   180          end;
   177       end;
   181       end;
       
   182 
   178    PrevdX:= hwSign(Gear^.dX);
   183    PrevdX:= hwSign(Gear^.dX);
   179    if (Gear^.Message and gm_Left  )<>0 then Gear^.dX:= -cLittle else
   184    if (Gear^.Message and gm_Left  )<>0 then Gear^.dX:= -cLittle else
   180    if (Gear^.Message and gm_Right )<>0 then Gear^.dX:=  cLittle else exit;
   185    if (Gear^.Message and gm_Right )<>0 then Gear^.dX:=  cLittle else exit;
       
   186    DeleteCI(Gear);
       
   187 
   181    StepTicks:= cHHStepTicks;
   188    StepTicks:= cHHStepTicks;
   182    if PrevdX <> hwSign(Gear^.dX) then exit;
   189    if PrevdX <> hwSign(Gear^.dX) then exit;
   183    PHedgehog(Gear^.Hedgehog)^.visStepPos:= (PHedgehog(Gear^.Hedgehog)^.visStepPos + 1) and 7;
   190    PHedgehog(Gear^.Hedgehog)^.visStepPos:= (PHedgehog(Gear^.Hedgehog)^.visStepPos + 1) and 7;
   184    if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
   191    if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
   185       begin
   192       begin
   220    Gear^.Y:= Gear^.Y + _1;
   227    Gear^.Y:= Gear^.Y + _1;
   221    if not TestCollisionYwithGear(Gear, 1) then
   228    if not TestCollisionYwithGear(Gear, 1) then
   222       begin
   229       begin
   223       Gear^.Y:= Gear^.Y - _6;
   230       Gear^.Y:= Gear^.Y - _6;
   224       Gear^.dY:= _0;
   231       Gear^.dY:= _0;
   225       Gear^.State:= Gear^.State or gstFalling
   232       Gear^.State:= Gear^.State or gstFalling;
   226       end;
   233       exit
   227    end
   234       end;
   228    end
   235    end
   229    end
   236    end
   230    end
   237    end
   231    end
   238    end
   232    end
   239    end
       
   240    end;
       
   241    AddGearCI(Gear)
   233    end
   242    end
   234 end;
   243 end;
   235 
   244 
   236 procedure HedgehogChAngle(Gear: PGear);
   245 procedure HedgehogChAngle(Gear: PGear);
   237 begin
   246 begin
   249 if isInMultiShoot and (Gear^.Damage = 0) then
   258 if isInMultiShoot and (Gear^.Damage = 0) then
   250    begin
   259    begin
   251    exit
   260    exit
   252    end;
   261    end;
   253 AllInactive:= false;
   262 AllInactive:= false;
   254 DeleteCI(Gear);
   263 
   255 if (TurnTimeLeft = 0) or (Gear^.Damage > 0) then
   264 if (TurnTimeLeft = 0) or (Gear^.Damage > 0) then
   256    begin
   265    begin
   257    TurnTimeLeft:= 0;
   266    TurnTimeLeft:= 0;
   258    Gear^.State:= Gear^.State and not gstHHDriven;
   267    Gear^.State:= Gear^.State and not gstHHDriven;
   259    if Gear^.Damage > 0 then
   268    if Gear^.Damage > 0 then
   299       begin
   308       begin
   300       CheckHHDamage(Gear);
   309       CheckHHDamage(Gear);
   301       if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55)
   310       if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55)
   302          and ((Gear^.State and gstHHJumping) <> 0) then SetLittle(Gear^.dX);
   311          and ((Gear^.State and gstHHJumping) <> 0) then SetLittle(Gear^.dX);
   303       Gear^.State:= Gear^.State and not (gstFalling or gstHHJumping or gstHHHJump);
   312       Gear^.State:= Gear^.State and not (gstFalling or gstHHJumping or gstHHHJump);
       
   313       AddGearCI(Gear);
   304       StepTicks:= 300;
   314       StepTicks:= 300;
   305       Gear^.dY:= _0
   315       Gear^.dY:= _0
   306       end;
   316       end;
   307    CheckGearDrowning(Gear);
   317    CheckGearDrowning(Gear);
   308    exit
   318    exit