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; |