hedgewars/uGearsHandlersMess.pas
changeset 15718 83c950393d7a
parent 15717 9060532c25f7
child 15719 08e556cad305
equal deleted inserted replaced
15717:9060532c25f7 15718:83c950393d7a
  7352 
  7352 
  7353     CreateShellForGear(Sentry, Sentry^.WDTimer and 1);
  7353     CreateShellForGear(Sentry, Sentry^.WDTimer and 1);
  7354     PlaySound(sndGun);
  7354     PlaySound(sndGun);
  7355 end;
  7355 end;
  7356 
  7356 
       
  7357 function GetSentryTarget(): PGear;
       
  7358 var HHGear: PGear;
       
  7359 begin
       
  7360     GetSentryTarget := nil;
       
  7361     if (CurrentHedgehog <> nil) then
       
  7362     begin
       
  7363         HHGear := CurrentHedgehog^.Gear;
       
  7364         if HHGear <> nil then
       
  7365         begin
       
  7366             if ((HHGear^.State and gstHHDriven) <> 0)
       
  7367                 and (HHGear^.CollisionIndex < 0) then
       
  7368                 GetSentryTarget := HHGear;
       
  7369         end
       
  7370     end
       
  7371 end;
       
  7372 
  7357 procedure doStepSentryLand(Gear: PGear);
  7373 procedure doStepSentryLand(Gear: PGear);
  7358 var HHGear: PGear;
  7374 var HHGear: PGear;
  7359 const sentry_Idle = 0;
  7375 const sentry_Idle = 0;
  7360     sentry_Walking = 1;
  7376     sentry_Walking = 1;
  7361     sentry_Aiming = 2;
  7377     sentry_Aiming = 2;
  7466 
  7482 
  7467     if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then
  7483     if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then
  7468         AimSentry(Gear);
  7484         AimSentry(Gear);
  7469 
  7485 
  7470     if ((GameTicks and $FF) = 0)
  7486     if ((GameTicks and $FF) = 0)
  7471         and (Gear^.Tag in [sentry_Idle, sentry_Walking])
  7487         and (Gear^.Tag in [sentry_Idle, sentry_Walking]) then
  7472         and (CurrentHedgehog <> nil)
       
  7473         and (CurrentHedgehog^.Gear <> nil)
       
  7474         and ((CurrentHedgehog^.Gear^.State and (gstMoving or gstHHDriven)) = (gstMoving or gstHHDriven)) then
       
  7475     begin
  7488     begin
  7476         HHGear := CurrentHedgehog^.Gear;
  7489         HHGear := GetSentryTarget();
  7477         if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then
  7490         if HHGear <> nil then
  7478         begin
  7491             if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then
  7479             Gear^.Target.X := hwRound(HHGear^.X);
  7492             begin
  7480             Gear^.Target.Y := hwRound(HHGear^.Y);
  7493                 Gear^.Target.X := hwRound(HHGear^.X);
  7481             Gear^.Karma := GameTicks;
  7494                 Gear^.Target.Y := hwRound(HHGear^.Y);
  7482             Gear^.Tag := sentry_Aiming;
  7495                 Gear^.Karma := GameTicks;
  7483             Gear^.Timer := 1800 + GetRandom(400);
  7496                 Gear^.Tag := sentry_Aiming;
  7484         end
  7497                 Gear^.Timer := 1800 + GetRandom(400);
       
  7498             end
  7485     end
  7499     end
  7486 end;
  7500 end;
  7487 
  7501 
  7488 procedure doStepSentryWater(Gear: PGear);
  7502 procedure doStepSentryWater(Gear: PGear);
  7489 var HHGear: PGear;
  7503 var HHGear: PGear;
  7566 
  7580 
  7567     if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then
  7581     if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then
  7568         AimSentry(Gear);
  7582         AimSentry(Gear);
  7569 
  7583 
  7570     if ((GameTicks and $FF) = 0)
  7584     if ((GameTicks and $FF) = 0)
  7571         and (Gear^.Tag in [sentry_Idle, sentry_Walking])
  7585         and (Gear^.Tag in [sentry_Idle, sentry_Walking]) then
  7572         and (CurrentHedgehog <> nil)
       
  7573         and (CurrentHedgehog^.Gear <> nil)
       
  7574         and ((CurrentHedgehog^.Gear^.State and (gstMoving or gstHHDriven)) = (gstMoving or gstHHDriven)) then
       
  7575     begin
  7586     begin
  7576         HHGear := CurrentHedgehog^.Gear;
  7587         HHGear := GetSentryTarget();
  7577         if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then
  7588         if HHGear <> nil then
  7578         begin
  7589             if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then
  7579             Gear^.Target.X := hwRound(HHGear^.X);
  7590             begin
  7580             Gear^.Target.Y := hwRound(HHGear^.Y);
  7591                 Gear^.Target.X := hwRound(HHGear^.X);
  7581             Gear^.Karma := GameTicks;
  7592                 Gear^.Target.Y := hwRound(HHGear^.Y);
  7582             Gear^.Tag := sentry_Aiming;
  7593                 Gear^.Karma := GameTicks;
  7583             Gear^.Timer := 1800 + GetRandom(400);
  7594                 Gear^.Tag := sentry_Aiming;
  7584         end
  7595                 Gear^.Timer := 1800 + GetRandom(400);
       
  7596             end
  7585     end
  7597     end
  7586 end;
  7598 end;
  7587 
  7599 
  7588 procedure doStepSentryDeploy(Gear: PGear);
  7600 procedure doStepSentryDeploy(Gear: PGear);
  7589 begin
  7601 begin