hedgewars/uGearsHedgehog.pas
changeset 10577 5e075da5e0a4
parent 10443 42dadeb6e8ae
child 10579 2effda40c3b2
equal deleted inserted replaced
10576:c23f13a65638 10577:5e075da5e0a4
   861 ////////////////////////////////////////////////////////////////////////////////
   861 ////////////////////////////////////////////////////////////////////////////////
   862 procedure doStepHedgehogMoving(Gear: PGear);
   862 procedure doStepHedgehogMoving(Gear: PGear);
   863 var isFalling, isUnderwater: boolean;
   863 var isFalling, isUnderwater: boolean;
   864     land: Word;
   864     land: Word;
   865 begin
   865 begin
       
   866 if Gear^.Hedgehog^.Unplaced then
       
   867     begin
       
   868     Gear^.dY:= _0;
       
   869     Gear^.dX:= _0;
       
   870     Gear^.State:= Gear^.State and (not gstMoving);
       
   871     exit
       
   872     end;
       
   873 
   866 land:= 0;
   874 land:= 0;
   867 isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius);
   875 isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius);
   868 if Gear^.dX.QWordValue > 8160437862 then
   876 if Gear^.dX.QWordValue > 8160437862 then
   869     Gear^.dX.QWordValue:= 8160437862;
   877     Gear^.dX.QWordValue:= 8160437862;
   870 if Gear^.dY.QWordValue > 8160437862 then
   878 if Gear^.dY.QWordValue > 8160437862 then
   871     Gear^.dY.QWordValue:= 8160437862;
   879     Gear^.dY.QWordValue:= 8160437862;
   872 
   880 
   873 if Gear^.Hedgehog^.Unplaced then
       
   874     begin
       
   875     Gear^.dY:= _0;
       
   876     Gear^.dX:= _0;
       
   877     Gear^.State:= Gear^.State and (not gstMoving);
       
   878     exit
       
   879     end;
       
   880 isFalling:= (Gear^.dY.isNegative) or (TestCollisionYKick(Gear, 1) = 0);
   881 isFalling:= (Gear^.dY.isNegative) or (TestCollisionYKick(Gear, 1) = 0);
   881 if isFalling then
   882 if isFalling then
   882     begin
   883     begin
   883     land:= TestCollisionYKick(Gear, -1);
   884     land:= TestCollisionYKick(Gear, -1);
   884     if (Gear^.dY.isNegative) and (land <> 0) then
   885     if (Gear^.dY.isNegative) and (land <> 0) then
  1357 
  1358 
  1358 ////////////////////////////////////////////////////////////////////////////////
  1359 ////////////////////////////////////////////////////////////////////////////////
  1359 procedure doStepHedgehog(Gear: PGear);
  1360 procedure doStepHedgehog(Gear: PGear);
  1360 var tX: hwFloat;
  1361 var tX: hwFloat;
  1361 begin
  1362 begin
  1362 CheckGearDrowning(Gear);
  1363 // it might make sense to skip more than just drowning check here
       
  1364 if (not Gear^.Hedgehog^.Unplaced) then
       
  1365     CheckGearDrowning(Gear);
  1363 if Gear = nil then exit;
  1366 if Gear = nil then exit;
  1364 tX:= Gear^.X;
  1367 tX:= Gear^.X;
  1365 if WorldWrap(Gear) then
  1368 if WorldWrap(Gear) then
  1366     begin
  1369     begin
  1367     if (WorldEdge <> weBounce) and (Gear = CurrentHedgehog^.Gear) and
  1370     if (WorldEdge <> weBounce) and (Gear = CurrentHedgehog^.Gear) and