hedgewars/GSHandlers.inc
changeset 5628 a9a0c67f9656
parent 5624 b6f70f6335ee
child 5638 e35ba2a400d8
equal deleted inserted replaced
5626:82e1811c5e70 5628:a9a0c67f9656
  4601 Gear^.doStep:= @doStepIdle
  4601 Gear^.doStep:= @doStepIdle
  4602 end;
  4602 end;
  4603 
  4603 
  4604 procedure doStepHammerHitWork(Gear: PGear);
  4604 procedure doStepHammerHitWork(Gear: PGear);
  4605 var 
  4605 var 
  4606     i, ei: LongInt;
  4606     i, j, ei: LongInt;
  4607     HitGear: PGear;
  4607     HitGear: PGear;
  4608 begin
  4608 begin
  4609     AllInactive := false;
  4609     AllInactive := false;
  4610     HitGear := Gear^.IntersectGear;
  4610     HitGear := Gear^.IntersectGear;
  4611     dec(Gear^.Timer);
  4611     dec(Gear^.Timer);
  4612     if (HitGear = nil) or (Gear^.Timer = 0) or ((Gear^.Message and gmDestroy) <> 0) then
  4612     if (HitGear = nil) or (Gear^.Timer = 0) or ((Gear^.Message and gmDestroy) <> 0) then
  4613     begin
  4613         begin
  4614         DeleteGear(Gear);
  4614         DeleteGear(Gear);
  4615         exit
  4615         exit
  4616     end;
  4616         end;
  4617 
  4617 
  4618     if (Gear^.Timer mod 5) = 0 then
  4618     if (Gear^.Timer mod 5) = 0 then
  4619     begin
  4619         begin
  4620         AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
  4620         AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
  4621 
  4621 
  4622         i := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2));
  4622         i := hwRound(Gear^.X) - HitGear^.Radius + 2;
  4623         ei := hwRound(Gear^.X) + Gear^.Radius + LongInt(GetRandom(2));
  4623         ei := hwRound(Gear^.X) + HitGear^.Radius - 2;
       
  4624         for j := 1 to 4 do DrawExplosion(i - GetRandom(5), hwRound(Gear^.Y) + 6*j, 3);
       
  4625         for j := 1 to 4 do DrawExplosion(ei + GetRandom(5), hwRound(Gear^.Y) + 6*j, 3);
  4624         while i <= ei do
  4626         while i <= ei do
  4625         begin
  4627             begin
  4626             DrawExplosion(i, hwRound(Gear^.Y) + 3, 3);
  4628             for j := 1 to 11 do DrawExplosion(i, hwRound(Gear^.Y) + 3*j, 3);
  4627             inc(i, 1)
  4629             inc(i, 1)
  4628         end;
  4630             end;
  4629 
  4631 
  4630         if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9)
  4632         if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9)
  4631            , lfIndestructible) then
  4633            , lfIndestructible) then
  4632         begin
  4634             begin
  4633             Gear^.X := Gear^.X + Gear^.dX;
  4635             Gear^.X := Gear^.X + Gear^.dX;
  4634             Gear^.Y := Gear^.Y + _1_9;
  4636             Gear^.Y := Gear^.Y + _1_9;
  4635         end;
  4637             end;
  4636         SetAllHHToActive;
  4638         end;
  4637     end;
       
  4638     if TestCollisionYwithGear(Gear, 1) then
  4639     if TestCollisionYwithGear(Gear, 1) then
  4639     begin
  4640         begin
  4640         Gear^.dY := _0;
  4641         Gear^.dY := _0;
  4641         SetLittle(HitGear^.dX);
  4642         SetLittle(HitGear^.dX);
  4642         HitGear^.dY := _0;
  4643         HitGear^.dY := _0;
  4643     end
  4644         end
  4644     else
  4645     else
  4645     begin
  4646         begin
  4646         Gear^.dY := Gear^.dY + cGravity;
  4647         Gear^.dY := Gear^.dY + cGravity;
  4647         Gear^.Y := Gear^.Y + Gear^.dY;
  4648         Gear^.Y := Gear^.Y + Gear^.dY;
  4648         if hwRound(Gear^.Y) > cWaterLine then Gear^.Timer := 1
  4649         if hwRound(Gear^.Y) > cWaterLine then Gear^.Timer := 1
  4649     end;
  4650         end;
  4650 
  4651 
  4651     Gear^.X := Gear^.X + HitGear^.dX;
  4652     Gear^.X := Gear^.X + HitGear^.dX;
  4652     HitGear^.X := Gear^.X;
  4653     HitGear^.X := Gear^.X;
  4653     HitGear^.Y := Gear^.Y - int2hwFloat(cHHRadius);
  4654     SetLittle(HitGear^.dY);
       
  4655     HitGear^.Active:= true;
  4654 end;
  4656 end;
  4655 
  4657 
  4656 procedure doStepHammerHit(Gear: PGear);
  4658 procedure doStepHammerHit(Gear: PGear);
  4657 var 
  4659 var 
  4658     i, y: LongInt;
  4660     i, y: LongInt;