702 CheckGearNear:= nil |
702 CheckGearNear:= nil |
703 end; |
703 end; |
704 |
704 |
705 procedure CheckCollision(Gear: PGear); inline; |
705 procedure CheckCollision(Gear: PGear); inline; |
706 begin |
706 begin |
707 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) |
707 if (TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0) |
708 or (TestCollisionYwithGear(Gear, hwSign(Gear^.dY)) <> 0) then |
708 or (TestCollisionYwithGear(Gear, hwSign(Gear^.dY)) <> 0) then |
709 Gear^.State := Gear^.State or gstCollision |
709 Gear^.State := Gear^.State or gstCollision |
710 else |
710 else |
711 Gear^.State := Gear^.State and (not gstCollision) |
711 Gear^.State := Gear^.State and (not gstCollision) |
712 end; |
712 end; |
713 |
713 |
714 procedure CheckCollisionWithLand(Gear: PGear); inline; |
714 procedure CheckCollisionWithLand(Gear: PGear); inline; |
715 begin |
715 begin |
716 if TestCollisionX(Gear, hwSign(Gear^.dX)) |
716 if (TestCollisionX(Gear, hwSign(Gear^.dX)) <> 0) |
717 or TestCollisionY(Gear, hwSign(Gear^.dY)) then |
717 or (TestCollisionY(Gear, hwSign(Gear^.dY)) <> 0) then |
718 Gear^.State := Gear^.State or gstCollision |
718 Gear^.State := Gear^.State or gstCollision |
719 else |
719 else |
720 Gear^.State := Gear^.State and (not gstCollision) |
720 Gear^.State := Gear^.State and (not gstCollision) |
721 end; |
721 end; |
722 |
722 |
723 function MakeHedgehogsStep(Gear: PGear) : boolean; |
723 function MakeHedgehogsStep(Gear: PGear) : boolean; |
724 begin |
724 begin |
725 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
725 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then if (TestCollisionYwithGear(Gear, -1) = 0) then |
726 begin |
726 begin |
727 Gear^.Y:= Gear^.Y - _1; |
727 Gear^.Y:= Gear^.Y - _1; |
728 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
728 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then if (TestCollisionYwithGear(Gear, -1) = 0) then |
729 begin |
729 begin |
730 Gear^.Y:= Gear^.Y - _1; |
730 Gear^.Y:= Gear^.Y - _1; |
731 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
731 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then if (TestCollisionYwithGear(Gear, -1) = 0) then |
732 begin |
732 begin |
733 Gear^.Y:= Gear^.Y - _1; |
733 Gear^.Y:= Gear^.Y - _1; |
734 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
734 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then if (TestCollisionYwithGear(Gear, -1) = 0) then |
735 begin |
735 begin |
736 Gear^.Y:= Gear^.Y - _1; |
736 Gear^.Y:= Gear^.Y - _1; |
737 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
737 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then if (TestCollisionYwithGear(Gear, -1) = 0) then |
738 begin |
738 begin |
739 Gear^.Y:= Gear^.Y - _1; |
739 Gear^.Y:= Gear^.Y - _1; |
740 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then if (TestCollisionYwithGear(Gear, -1) = 0) then |
740 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then if (TestCollisionYwithGear(Gear, -1) = 0) then |
741 begin |
741 begin |
742 Gear^.Y:= Gear^.Y - _1; |
742 Gear^.Y:= Gear^.Y - _1; |
743 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then |
743 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then |
744 Gear^.Y:= Gear^.Y + _6 |
744 Gear^.Y:= Gear^.Y + _6 |
745 end else Gear^.Y:= Gear^.Y + _5 else |
745 end else Gear^.Y:= Gear^.Y + _5 else |
746 end else Gear^.Y:= Gear^.Y + _4 else |
746 end else Gear^.Y:= Gear^.Y + _4 else |
747 end else Gear^.Y:= Gear^.Y + _3 else |
747 end else Gear^.Y:= Gear^.Y + _3 else |
748 end else Gear^.Y:= Gear^.Y + _2 else |
748 end else Gear^.Y:= Gear^.Y + _2 else |
749 end else Gear^.Y:= Gear^.Y + _1 |
749 end else Gear^.Y:= Gear^.Y + _1 |
750 end; |
750 end; |
751 |
751 |
752 if not TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then |
752 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) = 0 then |
753 begin |
753 begin |
754 Gear^.X:= Gear^.X + SignAs(_1, Gear^.dX); |
754 Gear^.X:= Gear^.X + SignAs(_1, Gear^.dX); |
755 MakeHedgehogsStep:= true |
755 MakeHedgehogsStep:= true |
756 end else |
756 end else |
757 MakeHedgehogsStep:= false; |
757 MakeHedgehogsStep:= false; |
966 Gear^.Active:= true; |
966 Gear^.Active:= true; |
967 DeleteCI(Gear); |
967 DeleteCI(Gear); |
968 Gear^.State:= Gear^.State or gstMoving; |
968 Gear^.State:= Gear^.State or gstMoving; |
969 if Gear^.Kind = gtKnife then Gear^.State:= Gear^.State and (not gstCollision); |
969 if Gear^.Kind = gtKnife then Gear^.State:= Gear^.State and (not gstCollision); |
970 // move the gear upwards a bit to throw it over tiny obstacles at start |
970 // move the gear upwards a bit to throw it over tiny obstacles at start |
971 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then |
971 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then |
972 begin |
972 begin |
973 if not (TestCollisionXwithXYShift(Gear, _0, -3, hwSign(Gear^.dX)) |
973 if (TestCollisionXwithXYShift(Gear, _0, -3, hwSign(Gear^.dX)) = 0) and |
974 or (TestCollisionYwithGear(Gear, -1) <> 0)) then |
974 (TestCollisionYwithGear(Gear, -1) = 0) then |
975 Gear^.Y:= Gear^.Y - _1; |
975 Gear^.Y:= Gear^.Y - _1; |
976 if not (TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) |
976 if (TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) = 0) and |
977 or (TestCollisionYwithGear(Gear, -1) <> 0)) then |
977 (TestCollisionYwithGear(Gear, -1) = 0) then |
978 Gear^.Y:= Gear^.Y - _1; |
978 Gear^.Y:= Gear^.Y - _1; |
979 if not (TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) |
979 if (TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) = 0) and |
980 or (TestCollisionYwithGear(Gear, -1) <> 0)) then |
980 (TestCollisionYwithGear(Gear, -1) = 0) then |
981 Gear^.Y:= Gear^.Y - _1; |
981 Gear^.Y:= Gear^.Y - _1; |
982 end |
982 end |
983 end; |
983 end; |
984 |
984 |
985 |
985 |