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 |