hedgewars/HHHandlers.inc
changeset 3428 46a2694867bc
parent 3422 41ae3c48faa0
child 3430 21c08c95a672
equal deleted inserted replaced
3427:b49ed5673727 3428:46a2694867bc
   100 
   100 
   101 
   101 
   102 procedure Attack(Gear: PGear);
   102 procedure Attack(Gear: PGear);
   103 var xx, yy: hwFloat;
   103 var xx, yy: hwFloat;
   104     tmpGear: PVisualGear;
   104     tmpGear: PVisualGear;
   105     newGear, iterator, portal: PGear;
       
   106 begin
   105 begin
   107 bShowFinger:= false;
   106 bShowFinger:= false;
   108 with Gear^,
   107 with Gear^,
   109      PHedgehog(Gear^.Hedgehog)^ do
   108      PHedgehog(Gear^.Hedgehog)^ do
   110      begin
   109      begin
   156                          amSkip: ParseCommand('/skip', true);
   155                          amSkip: ParseCommand('/skip', true);
   157                          amRope: CurAmmoGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtRope, 0, xx, yy, 0);
   156                          amRope: CurAmmoGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtRope, 0, xx, yy, 0);
   158                          amMine: AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000);
   157                          amMine: AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000);
   159                        amDEagle: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0);
   158                        amDEagle: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0);
   160                       amSineGun: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0);
   159                       amSineGun: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0);
   161                     amPortalGun: begin
   160                     amPortalGun: AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, 0);
   162                                  iterator:= GearsList;
       
   163                                  portal:= nil;
       
   164                                  while iterator <> nil do
       
   165                                      begin
       
   166                                      if (iterator^.Kind = gtPortal) then
       
   167                                          begin
       
   168                                          newGear:= iterator;
       
   169                                          iterator:= iterator^.NextGear;
       
   170                                          if (portal <> nil) then
       
   171                                              begin
       
   172                                              if (portal^.uid < newGear^.uid) then 
       
   173                                                  begin
       
   174                                                  deleteGear(portal);
       
   175                                                  portal:= newGear
       
   176                                                  end
       
   177                                              else
       
   178                                                  begin
       
   179                                                  if newGear^.NextGear = nil then iterator:= nil;
       
   180                                                  deleteGear(newGear);
       
   181                                                  end
       
   182                                              end
       
   183                                          else portal:= newGear
       
   184                                          end
       
   185                                      else iterator:= iterator^.NextGear
       
   186                                      end;
       
   187 
       
   188                                  newGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, 0);
       
   189                                  if portal <> nil then 
       
   190                                      begin
       
   191                                      newGear^.IntersectGear:= portal;
       
   192                                      if portal^.Tag < 2 then newGear^.Tag:= 2
       
   193                                      end
       
   194                                  else newGear^.IntersectGear:= nil;
       
   195                                  newGear^.Angle:= Angle;
       
   196                                  newGear^.DirAngle:= Angle * 180 / cMaxAngle - 90;
       
   197                                  if Gear^.DirAngle < 0 then Gear^.DirAngle:= Gear^.DirAngle + 360
       
   198                                  else if 360 < Gear^.DirAngle then Gear^.DirAngle:= Gear^.DirAngle - 360;
       
   199                                  Ammo^[CurSlot, CurAmmo].Timer:= 0
       
   200                                  end;
       
   201                   amSniperRifle: begin
   161                   amSniperRifle: begin
   202                                  PlaySound(sndSniperReload);
   162                                  PlaySound(sndSniperReload);
   203                                  CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0);
   163                                  CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0);
   204                                  end;
   164                                  end;
   205                      amDynamite: AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000);
   165                      amDynamite: AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000);