hedgewars/GSHandlers.inc
changeset 3485 ab91c56a9050
parent 3484 3c65b1d979cd
child 3497 9327fae93244
equal deleted inserted replaced
3484:3c65b1d979cd 3485:ab91c56a9050
  3629 
  3629 
  3630 ////////////////////////////////////////////////////////////////////////////////
  3630 ////////////////////////////////////////////////////////////////////////////////
  3631 procedure doStepFlamethrowerWork(Gear: PGear);
  3631 procedure doStepFlamethrowerWork(Gear: PGear);
  3632 var 
  3632 var 
  3633     HHGear: PGear;
  3633     HHGear: PGear;
  3634     rx, ry: hwFloat;
  3634     rx, ry, speed: hwFloat;
  3635     gX, gY: LongInt;
  3635     gX, gY: LongInt;
  3636     Fire: PGear;
  3636     Fire: PGear;
  3637 begin
  3637 begin
  3638     AllInactive := false;
  3638     AllInactive := false;
  3639     dec(Gear^.Timer);
       
  3640     HHGear := PHedgehog(Gear^.Hedgehog)^.Gear;
  3639     HHGear := PHedgehog(Gear^.Hedgehog)^.Gear;
  3641     HedgehogChAngle(HHGear);
  3640     HedgehogChAngle(HHGear);
  3642     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
  3641     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
  3643     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
  3642     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
  3644     if (Gear^.Timer mod 100) = 0 then
  3643     
  3645     begin
  3644     if (GameTicks and $FF) = 0 then
  3646         rx := rndSign(getRandom * _0_1);
  3645     begin
  3647         ry := rndSign(getRandom * _0_1);
  3646         if (HHGear^.Message and gm_Right) <> 0 then
  3648 
  3647         begin
  3649         Fire := AddGear(gx, gy, gtFlame, 0,
  3648             if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag)
  3650                     SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx,
  3649             else if Gear^.Tag > 5 then dec(Gear^.Tag);
  3651             AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0);
  3650         end
  3652         Fire^.State := Fire^.State or gsttmpFlag;
  3651         else if (HHGear^.Message and gm_Left) <> 0 then
  3653         
  3652         begin
  3654         if (Gear^.Timer mod 200) = 0 then 
  3653             if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag)
       
  3654             else if Gear^.Tag < 20 then inc(Gear^.Tag);
       
  3655         end
       
  3656     end;
       
  3657     
       
  3658     dec(Gear^.Timer);
       
  3659     if Gear^.Timer = 0 then
       
  3660     begin
       
  3661         dec(Gear^.Health);
       
  3662         if (Gear^.Health mod 10) = 0 then
       
  3663         begin
       
  3664             rx := rndSign(getRandom * _0_1);
       
  3665             ry := rndSign(getRandom * _0_1);
       
  3666             speed := _0_8 * (_10 / Gear^.Tag);
       
  3667     
  3655             Fire := AddGear(gx, gy, gtFlame, 0,
  3668             Fire := AddGear(gx, gy, gtFlame, 0,
  3656                         SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx,
  3669                         SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
  3657                 AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0);
  3670                 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
  3658     end;
  3671             Fire^.State := Fire^.State or gsttmpFlag;
  3659 
  3672             
  3660     if (Gear^.Timer = 0) or (HHGear^.Damage <> 0) then
  3673             if (Gear^.Health mod 20) = 0 then 
       
  3674                 Fire := AddGear(gx, gy, gtFlame, 0,
       
  3675                             SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
       
  3676                     AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
       
  3677         end;
       
  3678         Gear^.Timer:= Gear^.Tag
       
  3679     end;
       
  3680 
       
  3681     if (Gear^.Health = 0) or (HHGear^.Damage <> 0) then
  3661     begin
  3682     begin
  3662         DeleteGear(Gear);
  3683         DeleteGear(Gear);
  3663         AfterAttack
  3684         AfterAttack
  3664     end
  3685     end
       
  3686     else
       
  3687     begin
       
  3688         if Gear^.Tex <> nil then FreeTexture(Gear^.Tex);
       
  3689         Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 5)) +
       
  3690                      '%', cWhiteColor, fntSmall) 
       
  3691     end
  3665 end;
  3692 end;
  3666 
  3693 
  3667 procedure doStepFlamethrower(Gear: PGear);
  3694 procedure doStepFlamethrower(Gear: PGear);
  3668 var 
  3695 var 
  3669     HHGear: PGear;
  3696     HHGear: PGear;
  3670 begin
  3697 begin
  3671     HHGear := PHedgehog(Gear^.Hedgehog)^.Gear;
  3698     HHGear := PHedgehog(Gear^.Hedgehog)^.Gear;
  3672     HHGear^.Message := HHGear^.Message and not (gm_Up or gm_Down);
  3699     HHGear^.Message := HHGear^.Message and not (gm_Up or gm_Down or gm_Left or gm_Right);
  3673     HHGear^.State := HHGear^.State or gstNotKickable;
  3700     HHGear^.State := HHGear^.State or gstNotKickable;
  3674     Gear^.doStep := @doStepFlamethrowerWork
  3701     Gear^.doStep := @doStepFlamethrowerWork
  3675 end;
  3702 end;
  3676 
  3703 
  3677 
  3704