hedgewars/GSHandlers.inc
changeset 4254 47515c926984
parent 4246 e5cb885492df
child 4256 e78cb3eb228e
equal deleted inserted replaced
4252:13ec087713dd 4254:47515c926984
  3988 ////////////////////////////////////////////////////////////////////////////////
  3988 ////////////////////////////////////////////////////////////////////////////////
  3989 procedure doStepFlamethrowerWork(Gear: PGear);
  3989 procedure doStepFlamethrowerWork(Gear: PGear);
  3990 var 
  3990 var 
  3991     HHGear: PGear;
  3991     HHGear: PGear;
  3992     rx, ry, speed: hwFloat;
  3992     rx, ry, speed: hwFloat;
  3993     gX, gY: LongInt;
  3993     i, gX, gY: LongInt;
  3994     Fire: PGear;
  3994     Fire: PGear;
  3995 begin
  3995 begin
  3996     AllInactive := false;
  3996     AllInactive := false;
  3997     HHGear := PHedgehog(Gear^.Hedgehog)^.Gear;
  3997     HHGear := PHedgehog(Gear^.Hedgehog)^.Gear;
  3998     HedgehogChAngle(HHGear);
  3998     HedgehogChAngle(HHGear);
  3999     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
  3999     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
  4000     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
  4000     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
  4001     
  4001     
  4002     if (GameTicks and $FF) = 0 then
  4002     if (GameTicks and $FF) = 0 then
  4003     begin
  4003         begin
  4004         if (HHGear^.Message and gmRight) <> 0 then
  4004         if (HHGear^.Message and gmRight) <> 0 then
  4005         begin
  4005             begin
  4006             if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag)
  4006             if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag)
  4007             else if Gear^.Tag > 5 then dec(Gear^.Tag);
  4007             else if Gear^.Tag > 5 then dec(Gear^.Tag);
  4008         end
  4008             end
  4009         else if (HHGear^.Message and gmLeft) <> 0 then
  4009         else if (HHGear^.Message and gmLeft) <> 0 then
  4010         begin
  4010             begin
  4011             if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag)
  4011             if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag)
  4012             else if Gear^.Tag < 20 then inc(Gear^.Tag);
  4012             else if Gear^.Tag < 20 then inc(Gear^.Tag);
  4013         end
  4013             end
  4014     end;
  4014         end;
  4015     
  4015     
  4016     dec(Gear^.Timer);
  4016     dec(Gear^.Timer);
  4017     if Gear^.Timer = 0 then
  4017     if Gear^.Timer = 0 then
  4018     begin
  4018         begin
  4019         dec(Gear^.Health);
  4019         dec(Gear^.Health);
  4020         if (Gear^.Health mod 10) = 0 then
  4020         if (Gear^.Health mod 10) = 0 then
  4021         begin
  4021             begin
  4022             rx := rndSign(getRandom * _0_1);
  4022             rx := rndSign(getRandom * _0_1);
  4023             ry := rndSign(getRandom * _0_1);
  4023             ry := rndSign(getRandom * _0_1);
  4024             speed := _0_8 * (_10 / Gear^.Tag);
  4024             speed := _0_8 * (_10 / Gear^.Tag);
  4025     
  4025     
  4026             Fire := AddGear(gx, gy, gtFlame, 0,
  4026             Fire := AddGear(gx, gy, gtFlame, 0,
  4030             
  4030             
  4031             if (Gear^.Health mod 20) = 0 then 
  4031             if (Gear^.Health mod 20) = 0 then 
  4032                 Fire := AddGear(gx, gy, gtFlame, 0,
  4032                 Fire := AddGear(gx, gy, gtFlame, 0,
  4033                             SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
  4033                             SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
  4034                     AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
  4034                     AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
  4035         end;
  4035             end;
  4036         Gear^.Timer:= Gear^.Tag
  4036         Gear^.Timer:= Gear^.Tag
  4037     end;
  4037         end;
  4038 
  4038 
  4039     if (Gear^.Health = 0) or (HHGear^.Damage <> 0) then
  4039     if (Gear^.Health = 0) or (HHGear^.Damage <> 0) then
  4040     begin
  4040         begin
  4041         DeleteGear(Gear);
  4041         DeleteGear(Gear);
  4042         AfterAttack
  4042         AfterAttack
  4043     end
  4043         end
  4044     else
  4044     else
  4045     begin
  4045         begin
  4046         if Gear^.Tex <> nil then FreeTexture(Gear^.Tex);
  4046         i:= round(Gear^.Health / 5);
  4047         Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 5)) +
  4047         if i <> Gear^.Tag then
  4048                      '%', cWhiteColor, fntSmall) 
  4048             begin
  4049     end
  4049             Gear^.Tag:= i;
       
  4050             if Gear^.Tex <> nil then FreeTexture(Gear^.Tex);
       
  4051             Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(i) +
       
  4052                          '%', cWhiteColor, fntSmall)
       
  4053             end
       
  4054         end
  4050 end;
  4055 end;
  4051 
  4056 
  4052 procedure doStepFlamethrower(Gear: PGear);
  4057 procedure doStepFlamethrower(Gear: PGear);
  4053 var 
  4058 var 
  4054     HHGear: PGear;
  4059     HHGear: PGear;