hedgewars/GSHandlers.inc
changeset 263 36379e6abcdd
parent 219 73a2bf84d0e6
child 282 b1e3387389b6
equal deleted inserted replaced
262:b4bc05237c06 263:36379e6abcdd
   169 AllInactive:= false;
   169 AllInactive:= false;
   170 dec(Gear.Timer);
   170 dec(Gear.Timer);
   171 Gear.Y:= Gear.Y - 0.07;
   171 Gear.Y:= Gear.Y - 0.07;
   172 if Gear.Timer = 0 then
   172 if Gear.Timer = 0 then
   173    begin
   173    begin
   174    PHedgehog(Gear.Hedgehog).Gear.Active:= true;
   174    PHedgehog(Gear.Hedgehog).Gear.Active:= true; // to let current hh die
   175    DeleteGear(Gear)
   175    DeleteGear(Gear)
   176    end
   176    end
   177 end;
   177 end;
   178 
   178 
       
   179 procedure doStepHealthTagWorkUnderWater(Gear: PGear);
       
   180 begin
       
   181 AllInactive:= false;
       
   182 Gear.Y:= Gear.Y - 0.07;
       
   183 if Gear.Y <= cWaterLine + 10 then
       
   184    DeleteGear(Gear)
       
   185 end;
       
   186 
   179 procedure doStepHealthTag(Gear: PGear);
   187 procedure doStepHealthTag(Gear: PGear);
   180 var s: shortstring;
   188 var s: shortstring;
   181 begin
   189 begin
   182 AllInactive:= false;
   190 AllInactive:= false;
   183 str(Gear.State, s);
   191 str(Gear.State, s);
   184 Gear.Surf:= RenderString(s, PHedgehog(Gear.Hedgehog).Team.Color, fnt16);
   192 Gear.Surf:= RenderString(s, PHedgehog(Gear.Hedgehog).Team.Color, fnt16);
   185 Gear.doStep:= doStepHealthTagWork
   193 if Gear.Y < cWaterLine then Gear.doStep:= doStepHealthTagWork
       
   194                        else Gear.doStep:= doStepHealthTagWorkUnderWater
   186 end;
   195 end;
   187 
   196 
   188 ////////////////////////////////////////////////////////////////////////////////
   197 ////////////////////////////////////////////////////////////////////////////////
   189 procedure doStepGrave(Gear: PGear);
   198 procedure doStepGrave(Gear: PGear);
   190 begin
   199 begin
   874 Gear.dY:= -0.9;
   883 Gear.dY:= -0.9;
   875 Gear.doStep:= doStepFirePunchWork;
   884 Gear.doStep:= doStepFirePunchWork;
   876 DrawTunnel(HHGear.X - cHHRadius, HHGear.Y + 1, 0.5, 0.0, cHHRadius * 4, 5);
   885 DrawTunnel(HHGear.X - cHHRadius, HHGear.Y + 1, 0.5, 0.0, cHHRadius * 4, 5);
   877 end;
   886 end;
   878 
   887 
       
   888 ////////////////////////////////////////////////////////////////////////////////
       
   889 
   879 procedure doStepParachute(Gear: PGear);
   890 procedure doStepParachute(Gear: PGear);
   880 var HHGear: PGear;
   891 var HHGear: PGear;
   881 begin
   892 begin
   882 HHGear:= PHedgehog(Gear.Hedgehog).Gear;
   893 HHGear:= PHedgehog(Gear.Hedgehog).Gear;
   883 HHGear.State:= HHGear.State and not gstAttacking;
   894 HHGear.State:= HHGear.State and not gstAttacking;
   907 else if (Gear.Message and gm_Right) <> 0 then HHGear.X:= HHGear.X + cMaxWindSpeed * 40;
   918 else if (Gear.Message and gm_Right) <> 0 then HHGear.X:= HHGear.X + cMaxWindSpeed * 40;
   908 if (Gear.Message and gm_Up) <> 0 then HHGear.Y:= HHGear.Y - cGravity * 40
   919 if (Gear.Message and gm_Up) <> 0 then HHGear.Y:= HHGear.Y - cGravity * 40
   909 else if (Gear.Message and gm_Down) <> 0 then HHGear.Y:= HHGear.Y + cGravity * 40;
   920 else if (Gear.Message and gm_Down) <> 0 then HHGear.Y:= HHGear.Y + cGravity * 40;
   910 
   921 
   911 HHGear.Y:= HHGear.Y + cGravity * 100;
   922 HHGear.Y:= HHGear.Y + cGravity * 100;
   912 
   923 end;
   913 end;
   924 
   914 
   925 ////////////////////////////////////////////////////////////////////////////////
   915 
   926 const cAirPlaneSpeed = 0.8;
       
   927       cBombsDistance = 30;
       
   928       cBombsSpeed = 0.1;
       
   929 
       
   930 procedure doStepAirAttackWork(Gear: PGear);
       
   931 begin
       
   932 AllInactive:= false;
       
   933 Gear.X:= Gear.X + cAirPlaneSpeed;
       
   934 if (Gear.Health > 0)and(Gear.X >= Gear.dX)and(Gear.X < Gear.dX + cAirPlaneSpeed) then
       
   935    begin
       
   936    dec(Gear.Health);
       
   937    AddGear(round(Gear.X), round(Gear.Y), gtAirBomb, 0, cBombsSpeed, 0.0);
       
   938    Gear.dX:= Gear.dX + cBombsDistance
       
   939    end;
       
   940 if Gear.X > 2560 then DeleteGear(Gear)
       
   941 end;
       
   942 
       
   943 procedure doStepAirAttack(Gear: PGear);
       
   944 begin
       
   945 AllInactive:= false;
       
   946 Gear.X:= -512;
       
   947 Gear.Y:= -128;
       
   948 Gear.dX:= TargetPoint.X -
       
   949           cBombsDistance * 5 / 2 - 
       
   950           cBombsSpeed * sqrt(2 * (TargetPoint.Y - Gear.Y) / cGravity);
       
   951 Gear.Health:= 6;
       
   952 Gear.doStep:= doStepAirAttackWork
       
   953 end;
       
   954 
       
   955 ////////////////////////////////////////////////////////////////////////////////
       
   956 
       
   957 procedure doStepAirBomb(Gear: PGear);
       
   958 begin
       
   959 AllInactive:= false;
       
   960 doStepFallingGear(Gear);
       
   961 if (Gear.State and gstCollision) <> 0 then
       
   962    begin
       
   963    doMakeExplosion(round(Gear.X), round(Gear.Y), 35, EXPLAutoSound);
       
   964    DeleteGear(Gear);
       
   965    exit
       
   966    end;
       
   967 if (GameTicks and $3F) = 0 then
       
   968    AddGear(round(Gear.X), round(Gear.Y), gtSmokeTrace, 0)
       
   969 end;
       
   970 
       
   971