hedgewars/GSHandlers.inc
changeset 4881 35e6269227b6
parent 4880 07e9849c6a70
child 4886 e3e5362a308e
equal deleted inserted replaced
4880:07e9849c6a70 4881:35e6269227b6
  2408     HHGear: PGear;
  2408     HHGear: PGear;
  2409 begin
  2409 begin
  2410     Gear^.Hedgehog^.Unplaced := false;
  2410     Gear^.Hedgehog^.Unplaced := false;
  2411     HHGear := Gear^.Hedgehog^.Gear;
  2411     HHGear := Gear^.Hedgehog^.Gear;
  2412     HHGear^.Y := HHGear^.Y + HHGear^.dY;
  2412     HHGear^.Y := HHGear^.Y + HHGear^.dY;
       
  2413     HHGear^.X := HHGear^.X + HHGear^.dX;
  2413     // hedgehog falling to collect cases
  2414     // hedgehog falling to collect cases
  2414     HHGear^.dY := HHGear^.dY + cGravity;
  2415     HHGear^.dY := HHGear^.dY + cGravity;
  2415     if TestCollisionYwithGear(HHGear, 1)
  2416     if TestCollisionYwithGear(HHGear, 1)
  2416        or CheckGearDrowning(HHGear) then
  2417        or CheckGearDrowning(HHGear) then
  2417     begin
  2418     begin
  4588         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  4589         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  4589     dec(Gear^.Timer)
  4590     dec(Gear^.Timer)
  4590 end;
  4591 end;
  4591 
  4592 
  4592 ////////////////////////////////////////////////////////////////////////////////
  4593 ////////////////////////////////////////////////////////////////////////////////
  4593 
  4594 procedure doStepStructure(Gear: PGear);
       
  4595 var 
       
  4596     i, x, y: LongInt;
       
  4597     dX, dY: HWFloat;
       
  4598     hog: PHedgehog;
       
  4599 begin
       
  4600     if Gear^.Hedgehog <> nil then
       
  4601         if Gear^.Tag = 0 then
       
  4602         begin
       
  4603             hog:= Gear^.Hedgehog;
       
  4604             hog^.GearHidden:= hog^.Gear;
       
  4605             RemoveGearFromList(hog^.Gear);
       
  4606             hog^.Gear:= nil;
       
  4607             Gear^.Tag:= TotalRounds + 3;
       
  4608         end
       
  4609         else if Gear^.Tag = TotalRounds then
       
  4610         begin
       
  4611             hog:= Gear^.Hedgehog;
       
  4612             hog^.Gear:= hog^.GearHidden;
       
  4613             hog^.Gear^.X:= Gear^.X;
       
  4614             hog^.Gear^.Y:= Gear^.Y - Int2hwFloat(Gear^.Radius);
       
  4615             hog^.Gear^.Active:= false;
       
  4616             hog^.Gear^.State:= hog^.Gear^.State And not gstHHdriven;
       
  4617             InsertGearToList(hog^.Gear);
       
  4618             hog^.GearHidden:= nil;
       
  4619             Gear^.Hedgehog:= nil;
       
  4620         end;
       
  4621 
       
  4622     if (Gear^.dY.QWordValue <> 0) or (not TestCollisionYwithGear(Gear, 1)) then
       
  4623     begin
       
  4624         AllInactive := false;
       
  4625         Gear^.dY := Gear^.dY + cGravity;
       
  4626         Gear^.Y := Gear^.Y + Gear^.dY;
       
  4627         if (not Gear^.dY.isNegative) and (Gear^.dY > _0_001) then SetAllHHToActive;
       
  4628         if (Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, -1) then Gear^.dY := _0;
       
  4629         if (not Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, 1) then
       
  4630         begin
       
  4631             if Gear^.dY > _0_2 then
       
  4632                 for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
       
  4633                     AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
       
  4634             Gear^.dY := - Gear^.dY * Gear^.Elasticity;
       
  4635             if Gear^.dY > - _0_001 then Gear^.dY := _0
       
  4636             else if Gear^.dY < - _0_03 then
       
  4637                     PlaySound(Gear^.ImpactSound);
       
  4638         end;
       
  4639         CheckGearDrowning(Gear);
       
  4640     end;
       
  4641 
       
  4642     if (Gear^.dY.QWordValue = 0) then AddGearCI(Gear)
       
  4643     else if (Gear^.dY.QWordValue <> 0) then DeleteCI(Gear);
       
  4644 
       
  4645     dec(Gear^.Health, Gear^.Damage);
       
  4646     Gear^.Damage := 0;
       
  4647 
       
  4648     if Gear^.Health <= 0 then
       
  4649     begin
       
  4650         if Gear^.Hedgehog <> nil then
       
  4651         begin
       
  4652             hog:= Gear^.Hedgehog;
       
  4653             hog^.Gear:= hog^.GearHidden;
       
  4654             hog^.Gear^.X:= Gear^.X;
       
  4655             hog^.Gear^.Y:= Gear^.Y;
       
  4656             InsertGearToList(hog^.Gear);
       
  4657             hog^.GearHidden:= nil;
       
  4658             Gear^.Hedgehog:= nil;
       
  4659         end;
       
  4660 
       
  4661         x := hwRound(Gear^.X);
       
  4662         y := hwRound(Gear^.Y);
       
  4663 
       
  4664         DeleteGear(Gear);
       
  4665 
       
  4666         doMakeExplosion(x, y, 50, CurrentHedgehog, EXPLAutoSound);
       
  4667     end;
       
  4668 end;
       
  4669