38 |
38 |
39 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; |
39 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; |
40 function CheckGearDrowning(Gear: PGear): boolean; |
40 function CheckGearDrowning(Gear: PGear): boolean; |
41 procedure CheckCollision(Gear: PGear); inline; |
41 procedure CheckCollision(Gear: PGear); inline; |
42 procedure CheckCollisionWithLand(Gear: PGear); inline; |
42 procedure CheckCollisionWithLand(Gear: PGear); inline; |
|
43 |
|
44 function MakeHedgehogsStep(Gear: PGear) : boolean; |
43 |
45 |
44 var doStepHandlers: array[TGearType] of TGearStepProcedure; |
46 var doStepHandlers: array[TGearType] of TGearStepProcedure; |
45 |
47 |
46 |
48 |
47 implementation |
49 implementation |
680 Gear^.State := Gear^.State or gstCollision |
682 Gear^.State := Gear^.State or gstCollision |
681 else |
683 else |
682 Gear^.State := Gear^.State and (not gstCollision) |
684 Gear^.State := Gear^.State and (not gstCollision) |
683 end; |
685 end; |
684 |
686 |
|
687 function MakeHedgehogsStep(Gear: PGear) : boolean; |
|
688 begin |
|
689 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
|
690 begin |
|
691 Gear^.Y:= Gear^.Y - _1; |
|
692 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
|
693 begin |
|
694 Gear^.Y:= Gear^.Y - _1; |
|
695 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
|
696 begin |
|
697 Gear^.Y:= Gear^.Y - _1; |
|
698 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
|
699 begin |
|
700 Gear^.Y:= Gear^.Y - _1; |
|
701 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
|
702 begin |
|
703 Gear^.Y:= Gear^.Y - _1; |
|
704 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
|
705 begin |
|
706 Gear^.Y:= Gear^.Y - _1; |
|
707 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then |
|
708 Gear^.Y:= Gear^.Y + _6 |
|
709 end else Gear^.Y:= Gear^.Y + _5 else |
|
710 end else Gear^.Y:= Gear^.Y + _4 else |
|
711 end else Gear^.Y:= Gear^.Y + _3 else |
|
712 end else Gear^.Y:= Gear^.Y + _2 else |
|
713 end else Gear^.Y:= Gear^.Y + _1 |
|
714 end; |
|
715 |
|
716 if not TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then |
|
717 begin |
|
718 Gear^.X:= Gear^.X + SignAs(_1, Gear^.dX); |
|
719 MakeHedgehogsStep:= true |
|
720 end else |
|
721 MakeHedgehogsStep:= false; |
|
722 |
|
723 if TestCollisionYwithGear(Gear, 1) = 0 then |
|
724 begin |
|
725 Gear^.Y:= Gear^.Y + _1; |
|
726 if TestCollisionYwithGear(Gear, 1) = 0 then |
|
727 begin |
|
728 Gear^.Y:= Gear^.Y + _1; |
|
729 if TestCollisionYwithGear(Gear, 1) = 0 then |
|
730 begin |
|
731 Gear^.Y:= Gear^.Y + _1; |
|
732 if TestCollisionYwithGear(Gear, 1) = 0 then |
|
733 begin |
|
734 Gear^.Y:= Gear^.Y + _1; |
|
735 if TestCollisionYwithGear(Gear, 1) = 0 then |
|
736 begin |
|
737 Gear^.Y:= Gear^.Y + _1; |
|
738 if TestCollisionYwithGear(Gear, 1) = 0 then |
|
739 begin |
|
740 Gear^.Y:= Gear^.Y + _1; |
|
741 if TestCollisionYwithGear(Gear, 1) = 0 then |
|
742 begin |
|
743 Gear^.Y:= Gear^.Y - _6; |
|
744 Gear^.dY:= _0; |
|
745 Gear^.State:= Gear^.State or gstMoving; |
|
746 exit |
|
747 end; |
|
748 end |
|
749 end |
|
750 end |
|
751 end |
|
752 end |
|
753 end; |
|
754 end; |
|
755 |
685 end. |
756 end. |