hedgewars/uGears.pas
changeset 263 36379e6abcdd
parent 211 558476056205
child 283 28d105f378f1
equal deleted inserted replaced
262:b4bc05237c06 263:36379e6abcdd
   110                                                                doStepFlame,
   110                                                                doStepFlame,
   111                                                                doStepFirePunch,
   111                                                                doStepFirePunch,
   112                                                                doStepActionTimer,
   112                                                                doStepActionTimer,
   113                                                                doStepActionTimer,
   113                                                                doStepActionTimer,
   114                                                                doStepActionTimer,
   114                                                                doStepActionTimer,
   115                                                                doStepParachute
   115                                                                doStepParachute,
       
   116                                                                doStepAirAttack,
       
   117                                                                doStepAirBomb
   116                                                                );
   118                                                                );
   117 
   119 
   118 function AddGear(X, Y: integer; Kind: TGearType; State: Longword; const dX: Double=0.0; dY: Double=0.0; Timer: LongWord=0): PGear;
   120 function AddGear(X, Y: integer; Kind: TGearType; State: Longword; const dX: Double=0.0; dY: Double=0.0; Timer: LongWord=0): PGear;
   119 const Counter: Longword = 0;
   121 const Counter: Longword = 0;
   120 begin
   122 begin
   219                 end;
   221                 end;
   220    gtFirePunch: begin
   222    gtFirePunch: begin
   221                 Result.Radius:= 15;
   223                 Result.Radius:= 15;
   222                 Result.Tag:= Y
   224                 Result.Tag:= Y
   223                 end;
   225                 end;
       
   226     gtAirBomb: begin
       
   227                Result.Radius:= 3;
       
   228                end;
   224      end;
   229      end;
   225 if GearsList = nil then GearsList:= Result
   230 if GearsList = nil then GearsList:= Result
   226                    else begin
   231                    else begin
   227                    GearsList.PrevGear:= Result;
   232                    GearsList.PrevGear:= Result;
   228                    Result.NextGear:= GearsList;
   233                    Result.NextGear:= GearsList;
   242       Gear.Message:= gm_Destroy;
   247       Gear.Message:= gm_Destroy;
   243       CurAmmoGear.Message:= gm_Destroy;
   248       CurAmmoGear.Message:= gm_Destroy;
   244       exit
   249       exit
   245       end else
   250       end else
   246       begin
   251       begin
       
   252       if Gear.Y >= cWaterLine then
       
   253          AddGear(Round(Gear.X), Round(Gear.Y), gtHealthTag, max(Gear.Damage, Gear.Health)).Hedgehog:= Gear.Hedgehog;
   247       team:= PHedgehog(Gear.Hedgehog).Team;
   254       team:= PHedgehog(Gear.Hedgehog).Team;
   248       PHedgehog(Gear.Hedgehog).Gear:= nil;
       
   249       if CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog].Gear = Gear then
   255       if CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog].Gear = Gear then
   250          FreeActionsList; // to avoid ThinkThread on drawned gear
   256          FreeActionsList; // to avoid ThinkThread on drawned gear
       
   257       PHedgehog(Gear.Hedgehog).Gear:= nil;
   251       RecountTeamHealth(team);
   258       RecountTeamHealth(team);
   252       end;
   259       end;
   253 {$IFDEF DEBUGFILE}AddFileLog('DeleteGear: handle = '+inttostr(integer(Gear)));{$ENDIF}
   260 {$IFDEF DEBUGFILE}AddFileLog('DeleteGear: handle = '+inttostr(integer(Gear)));{$ENDIF}
   254 if CurAmmoGear = Gear then CurAmmoGear:= nil;
   261 if CurAmmoGear = Gear then CurAmmoGear:= nil;
   255 if FollowGear = Gear then FollowGear:= nil;
   262 if FollowGear = Gear then FollowGear:= nil;
   515                          posCaseHealth: DrawSprite(sprFAid, Round(Gear.X) - 24 + WorldDx, Round(Gear.Y) - 24 + WorldDy, (GameTicks shr 6) mod 13, Surface);
   522                          posCaseHealth: DrawSprite(sprFAid, Round(Gear.X) - 24 + WorldDx, Round(Gear.Y) - 24 + WorldDy, (GameTicks shr 6) mod 13, Surface);
   516                          end;
   523                          end;
   517      gtClusterBomb: DrawSprite(sprClusterBomb, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
   524      gtClusterBomb: DrawSprite(sprClusterBomb, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
   518          gtCluster: DrawSprite(sprClusterParticle, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, 0, Surface);
   525          gtCluster: DrawSprite(sprClusterParticle, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, 0, Surface);
   519            gtFlame: DrawSprite(sprFlame, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy,(GameTicks div 128 + Gear.Angle) mod 8, Surface);
   526            gtFlame: DrawSprite(sprFlame, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy,(GameTicks div 128 + Gear.Angle) mod 8, Surface);
       
   527          gtAirBomb: DrawSprite(sprAirBomb , Round(Gear.X) - 16 + WorldDx, Round(Gear.Y) - 16 + WorldDy, DxDy2Angle32(Gear.dY, Gear.dX), Surface);
   520               end;
   528               end;
   521       Gear:= Gear.NextGear
   529       Gear:= Gear.NextGear
   522       end;
   530       end;
   523 end;
   531 end;
   524 
   532