hedgewars/GSHandlers.inc
changeset 4315 7d0c90cf9936
parent 4312 2610ad7c6d6c
parent 4313 0690067bc5ff
child 4317 ba5d5a2f4c4b
equal deleted inserted replaced
4312:2610ad7c6d6c 4315:7d0c90cf9936
  2074     doStepParachuteWork(Gear)
  2074     doStepParachuteWork(Gear)
  2075 end;
  2075 end;
  2076 
  2076 
  2077 ////////////////////////////////////////////////////////////////////////////////
  2077 ////////////////////////////////////////////////////////////////////////////////
  2078 procedure doStepAirAttackWork(Gear: PGear);
  2078 procedure doStepAirAttackWork(Gear: PGear);
  2079 var 
  2079 //var 
  2080     i: Longint;
  2080 //    i: Longint;
  2081 begin
  2081 begin
  2082     AllInactive := false;
  2082     AllInactive := false;
  2083     Gear^.X := Gear^.X + cAirPlaneSpeed * Gear^.Tag;
  2083     Gear^.X := Gear^.X + cAirPlaneSpeed * Gear^.Tag;
  2084 
  2084 
  2085     if (Gear^.Health > 0)and(not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then
  2085     if (Gear^.Health > 0)and(not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then
  2088         case Gear^.State of 
  2088         case Gear^.State of 
  2089             0: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed *
  2089             0: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed *
  2090                              Gear^.Tag, _0, 0);
  2090                              Gear^.Tag, _0, 0);
  2091             1: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine,    0, cBombsSpeed *
  2091             1: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine,    0, cBombsSpeed *
  2092                              Gear^.Tag, _0, 0);
  2092                              Gear^.Tag, _0, 0);
  2093             2: for i:= -19 to 19 do
  2093             2: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtNapalmBomb, 0, cBombsSpeed *
  2094                    FollowGear := AddGear(hwRound(Gear^.X) + i div 3, hwRound(Gear^.Y), gtFlame, 0,
  2094                              Gear^.Tag, _0, 0);
  2095                                  _0_001 * i, _0, 0);
  2095             //2: for i:= -19 to 19 do
       
  2096             //       FollowGear := AddGear(hwRound(Gear^.X) + i div 3, hwRound(Gear^.Y), gtFlame, 0,
       
  2097             //                     _0_001 * i, _0, 0);
  2096             3: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtDrill, gsttmpFlag, cBombsSpeed *
  2098             3: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtDrill, gsttmpFlag, cBombsSpeed *
  2097                              Gear^.Tag, _0, 0);
  2099                              Gear^.Tag, _0, 0);
  2098             //4: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtWaterMelon, 0, cBombsSpeed *
  2100             //4: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtWaterMelon, 0, cBombsSpeed *
  2099             //                 Gear^.Tag, _0, 5000);
  2101             //                 Gear^.Tag, _0, 5000);
  2100         end;
  2102         end;
  2123     end;
  2125     end;
  2124 
  2126 
  2125     Gear^.Y := int2hwFloat(topY-300);
  2127     Gear^.Y := int2hwFloat(topY-300);
  2126     Gear^.dX := int2hwFloat(TargetPoint.X - 5 * Gear^.Tag * 15);
  2128     Gear^.dX := int2hwFloat(TargetPoint.X - 5 * Gear^.Tag * 15);
  2127 
  2129 
  2128     if (int2hwFloat(TargetPoint.Y) - Gear^.Y > _0) and (Gear^.State <> 2) then
  2130     if (int2hwFloat(TargetPoint.Y) - Gear^.Y > _0) then //and (Gear^.State <> 2) then
  2129         Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(TargetPoint.Y) - Gear^.Y) * 2 /
  2131         Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(TargetPoint.Y) - Gear^.Y) * 2 /
  2130                     cGravity) * Gear^.Tag;
  2132                     cGravity) * Gear^.Tag;
  2131 
  2133 
  2132     Gear^.Health := 6;
  2134     Gear^.Health := 6;
  2133     Gear^.doStep := @doStepAirAttackWork;
  2135     Gear^.doStep := @doStepAirAttackWork;
  4359         Gear^.doStep := @doStepIdle;
  4361         Gear^.doStep := @doStepIdle;
  4360         end
  4362         end
  4361 end;
  4363 end;
  4362 
  4364 
  4363 ////////////////////////////////////////////////////////////////////////////////
  4365 ////////////////////////////////////////////////////////////////////////////////
  4364 
  4366 procedure doStepNapalmBomb(Gear: PGear);
       
  4367 var
       
  4368     i, gX, gY: LongInt;
       
  4369     dX, dY: hwFloat;
       
  4370 begin
       
  4371     AllInactive := false;
       
  4372     doStepFallingGear(Gear);
       
  4373     if (Gear^.Timer > 0) and ((Gear^.State and gstCollision) <> 0) then
       
  4374     begin
       
  4375         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, EXPLAutoSound);
       
  4376         gX := hwRound(Gear^.X);
       
  4377         gY := hwRound(Gear^.Y); 
       
  4378         for i:= 0 to 10 do
       
  4379         begin
       
  4380             dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1);
       
  4381             dY := AngleSin(i * 8) * _0_5 * (GetRandom + _1);
       
  4382             AddGear(gX, gY, gtFlame, 0, dX, dY, 0);
       
  4383             AddGear(gX, gY, gtFlame, 0, dX, -dY, 0);
       
  4384             AddGear(gX, gY, gtFlame, 0, -dX, dY, 0);
       
  4385             AddGear(gX, gY, gtFlame, 0, -dX, -dY, 0);
       
  4386         end;
       
  4387         DeleteGear(Gear);
       
  4388         exit
       
  4389     end;
       
  4390     if (Gear^.Timer = 0) then
       
  4391     begin
       
  4392         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, EXPLAutoSound);
       
  4393         for i:= -19 to 19 do
       
  4394            FollowGear := AddGear(hwRound(Gear^.X) + i div 3, hwRound(Gear^.Y), gtFlame, 0, _0_001 * i, _0, 0);
       
  4395         DeleteGear(Gear);
       
  4396         exit
       
  4397     end;
       
  4398     if (GameTicks and $3F) = 0 then
       
  4399         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
       
  4400     dec(Gear^.Timer)
       
  4401 end;
       
  4402 
       
  4403 ////////////////////////////////////////////////////////////////////////////////
       
  4404