hedgewars/GSHandlers.inc
changeset 8413 454191defee6
parent 8370 0c79946e96f8
child 8444 75db7bb8dce8
child 8494 53b91a602955
equal deleted inserted replaced
8412:a2465e542e3d 8413:454191defee6
   296 
   296 
   297 ////////////////////////////////////////////////////////////////////////////////
   297 ////////////////////////////////////////////////////////////////////////////////
   298 procedure doStepBomb(Gear: PGear);
   298 procedure doStepBomb(Gear: PGear);
   299 var 
   299 var 
   300     i, x, y: LongInt;
   300     i, x, y: LongInt;
   301     dX, dY: hwFloat;
   301     dX, dY, gdX: hwFloat;
   302     vg: PVisualGear;
   302     vg: PVisualGear;
   303 begin
   303 begin
   304     AllInactive := false;
   304     AllInactive := false;
   305 
   305 
   306     doStepFallingGear(Gear);
   306     doStepFallingGear(Gear);
   336             gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 40, Gear^.Hedgehog, EXPLAutoSound);
   336             gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 40, Gear^.Hedgehog, EXPLAutoSound);
   337             gtClusterBomb: 
   337             gtClusterBomb: 
   338                 begin
   338                 begin
   339                 x := hwRound(Gear^.X);
   339                 x := hwRound(Gear^.X);
   340                 y := hwRound(Gear^.Y);
   340                 y := hwRound(Gear^.Y);
       
   341                 gdX:= Gear^.dX;
   341                 doMakeExplosion(x, y, 20, Gear^.Hedgehog, EXPLAutoSound);
   342                 doMakeExplosion(x, y, 20, Gear^.Hedgehog, EXPLAutoSound);
   342                 for i:= 0 to 4 do
   343                 for i:= 0 to 4 do
   343                     begin
   344                     begin
   344                     dX := rndSign(GetRandomf * _0_1) + Gear^.dX / 5;
   345                     dX := rndSign(GetRandomf * _0_1) + gdX / 5;
   345                     dY := (GetRandomf - _3) * _0_08;
   346                     dY := (GetRandomf - _3) * _0_08;
   346                     FollowGear := AddGear(x, y, gtCluster, 0, dX, dY, 25)
   347                     FollowGear := AddGear(x, y, gtCluster, 0, dX, dY, 25)
   347                     end
   348                     end
   348                 end;
   349                 end;
   349             gtWatermelon: 
   350             gtWatermelon: 
   350                 begin
   351                 begin
   351                 x := hwRound(Gear^.X);
   352                 x := hwRound(Gear^.X);
   352                 y := hwRound(Gear^.Y);
   353                 y := hwRound(Gear^.Y);
       
   354                 gdX:= Gear^.dX;
   353                 doMakeExplosion(x, y, 75, Gear^.Hedgehog, EXPLAutoSound);
   355                 doMakeExplosion(x, y, 75, Gear^.Hedgehog, EXPLAutoSound);
   354                 for i:= 0 to 5 do
   356                 for i:= 0 to 5 do
   355                     begin
   357                     begin
   356                     dX := rndSign(GetRandomf * _0_1) + Gear^.dX / 5;
   358                     dX := rndSign(GetRandomf * _0_1) + gdX / 5;
   357                     dY := (GetRandomf - _1_5) * _0_3;
   359                     dY := (GetRandomf - _1_5) * _0_3;
   358                     FollowGear:= AddGear(x, y, gtMelonPiece, 0, dX, dY, 75);
   360                     FollowGear:= AddGear(x, y, gtMelonPiece, 0, dX, dY, 75);
   359                     FollowGear^.DirAngle := i * 60
   361                     FollowGear^.DirAngle := i * 60
   360                     end
   362                     end
   361                 end;
   363                 end;
  2412 end;
  2414 end;
  2413 
  2415 
  2414 ////////////////////////////////////////////////////////////////////////////////
  2416 ////////////////////////////////////////////////////////////////////////////////
  2415 procedure doStepMortar(Gear: PGear);
  2417 procedure doStepMortar(Gear: PGear);
  2416 var 
  2418 var 
  2417     dX, dY: hwFloat;
  2419     dX, dY, gdX, gdY: hwFloat;
  2418     i: LongInt;
  2420     i: LongInt;
  2419     dxn, dyn: boolean;
  2421     dxn, dyn: boolean;
  2420 begin
  2422 begin
  2421     AllInactive := false;
  2423     AllInactive := false;
  2422     dxn := Gear^.dX.isNegative;
  2424     dxn := Gear^.dX.isNegative;
  2423     dyn := Gear^.dY.isNegative;
  2425     dyn := Gear^.dY.isNegative;
  2424 
  2426 
  2425     doStepFallingGear(Gear);
  2427     doStepFallingGear(Gear);
  2426     if (Gear^.State and gstCollision) <> 0 then
  2428     if (Gear^.State and gstCollision) <> 0 then
  2427         begin
  2429         begin
       
  2430         gdX := Gear^.dX;
       
  2431         gdY := Gear^.dY;
  2428         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, Gear^.Hedgehog, EXPLAutoSound);
  2432         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, Gear^.Hedgehog, EXPLAutoSound);
  2429 
  2433 
  2430         Gear^.dX.isNegative := not dxn;
  2434         gdX.isNegative := not dxn;
  2431         Gear^.dY.isNegative := not dyn;
  2435         gdY.isNegative := not dyn;
  2432         for i:= 0 to 4 do
  2436         for i:= 0 to 4 do
  2433             begin
  2437             begin
  2434             dX := Gear^.dX + (GetRandomf - _0_5) * _0_03;
  2438             dX := gdX + (GetRandomf - _0_5) * _0_03;
  2435             dY := Gear^.dY + (GetRandomf - _0_5) * _0_03;
  2439             dY := gdY + (GetRandomf - _0_5) * _0_03;
  2436             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
  2440             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
  2437             end;
  2441             end;
  2438 
  2442 
  2439         DeleteGear(Gear);
  2443         DeleteGear(Gear);
  2440         exit
  2444         exit