hedgewars/uGearsHandlersMess.pas
changeset 15869 2839b68a3732
parent 15866 4e3c340eb766
child 15873 9bb85e43e492
equal deleted inserted replaced
15868:78745063cf33 15869:2839b68a3732
  7243     if (offsetX >= Sentry^.Radius) and (not cGravity.isNegative) then
  7243     if (offsetX >= Sentry^.Radius) and (not cGravity.isNegative) then
  7244     begin
  7244     begin
  7245         Sentry^.dY := -_0_25;
  7245         Sentry^.dY := -_0_25;
  7246         jumpTime := _2 * Sentry^.dY / cGravity;
  7246         jumpTime := _2 * Sentry^.dY / cGravity;
  7247         Sentry^.dX := SignAs(int2hwFloat(offsetX - Sentry^.Radius) / jumpTime, Sentry^.dX);
  7247         Sentry^.dX := SignAs(int2hwFloat(offsetX - Sentry^.Radius) / jumpTime, Sentry^.dX);
       
  7248         Sentry^.State := Sentry^.State or gstHHJumping;
  7248         MakeSentryJump := true;
  7249         MakeSentryJump := true;
  7249     end;
  7250     end;
  7250 end;
  7251 end;
  7251 
  7252 
  7252 function TraceAttackPath(fromX, fromY, toX, toY, step: hwFloat; mask: Word): LongWord;
  7253 function TraceAttackPath(fromX, fromY, toX, toY, step: hwFloat; mask: Word): LongWord;
  7395     end
  7396     end
  7396 end;
  7397 end;
  7397 
  7398 
  7398 procedure doStepSentryLand(Gear: PGear);
  7399 procedure doStepSentryLand(Gear: PGear);
  7399 var HHGear: PGear;
  7400 var HHGear: PGear;
       
  7401     land: Word;
  7400 const sentry_Idle = 0;
  7402 const sentry_Idle = 0;
  7401     sentry_Walking = 1;
  7403     sentry_Walking = 1;
  7402     sentry_Aiming = 2;
  7404     sentry_Aiming = 2;
  7403     sentry_Attacking = 3;
  7405     sentry_Attacking = 3;
  7404     sentry_Reloading = 4;
  7406     sentry_Reloading = 4;
  7409         exit;
  7411         exit;
  7410 
  7412 
  7411     if CheckSentryDestroyed(Gear, sentry_Reloading) then
  7413     if CheckSentryDestroyed(Gear, sentry_Reloading) then
  7412         exit;
  7414         exit;
  7413 
  7415 
  7414     if Gear^.dY.isNegative or (TestCollisionYwithGear(Gear, 1) = 0) then
  7416     land := TestCollisionYwithGear(Gear, 1);
       
  7417     if Gear^.dY.isNegative or (land = 0) or
       
  7418         ((Gear^.dY.QWordValue > _0_01.QWordValue) and ((Gear^.State and gstHHJumping) = 0)) then
  7415     begin
  7419     begin
  7416         DeleteCI(Gear);
  7420         DeleteCI(Gear);
  7417         doStepFallingGear(Gear);
  7421         doStepFallingGear(Gear);
  7418         if not (Gear^.Tag in [sentry_Idle, sentry_Reloading]) then
  7422         if not (Gear^.Tag in [sentry_Idle, sentry_Reloading]) then
  7419             ResetSentryState(Gear, sentry_Idle, 1000);
  7423             ResetSentryState(Gear, sentry_Idle, 1000);
  7420         exit;
  7424         exit;
  7421     end
  7425     end
  7422     else
  7426     else
       
  7427     begin
  7423         AddCI(Gear);
  7428         AddCI(Gear);
       
  7429         Gear^.State := Gear^.State and (not gstHHJumping);
       
  7430         Gear^.dX := SignAs(_0, Gear^.dX);
       
  7431         Gear^.dY := SignAs(_0, Gear^.dY);
       
  7432     end;
  7424 
  7433 
  7425     if Gear^.Timer > 0 then dec(Gear^.Timer);
  7434     if Gear^.Timer > 0 then dec(Gear^.Timer);
  7426 
  7435 
  7427     if Gear^.Timer = 0 then
  7436     if Gear^.Timer = 0 then
  7428     begin
  7437     begin