682 begin |
682 begin |
683 with RopePoints.ar[RopePoints.Count] do |
683 with RopePoints.ar[RopePoints.Count] do |
684 begin |
684 begin |
685 X:= Gear^.X; |
685 X:= Gear^.X; |
686 Y:= Gear^.Y; |
686 Y:= Gear^.Y; |
687 if RopePoints.Count = 0 then RopePoints.HookAngle:= DxDy2Angle(Gear^.dY, Gear^.dX); |
687 if RopePoints.Count = 0 then RopePoints.HookAngle:= DxDy2Angle(ropeDx, ropeDy); |
688 b:= (cc * HHGear^.dY) > (cs * HHGear^.dX); |
688 b:= (cc * HHGear^.dY) > (cs * HHGear^.dX); |
689 dLen:= len |
689 dLen:= len |
690 end; |
690 end; |
691 Gear^.X:= Gear^.X + tx; |
691 Gear^.X:= Gear^.X + tx; |
692 Gear^.Y:= Gear^.Y + ty; |
692 Gear^.Y:= Gear^.Y + ty; |
711 Gear^.Elasticity:= Gear^.Elasticity + RopePoints.ar[RopePoints.Count].dLen; |
711 Gear^.Elasticity:= Gear^.Elasticity + RopePoints.ar[RopePoints.Count].dLen; |
712 Gear^.Friction:= Gear^.Friction + RopePoints.ar[RopePoints.Count].dLen |
712 Gear^.Friction:= Gear^.Friction + RopePoints.ar[RopePoints.Count].dLen |
713 end |
713 end |
714 end; |
714 end; |
715 |
715 |
716 Gear^.dX:= HHGear^.X - Gear^.X; |
716 ropeDx:= HHGear^.X - Gear^.X; |
717 Gear^.dY:= HHGear^.Y - Gear^.Y; |
717 ropeDy:= HHGear^.Y - Gear^.Y; |
718 |
718 |
719 cs:= Gear^.dY + HHGear^.dY; |
719 cs:= ropeDy + HHGear^.dY; |
720 cc:= Gear^.dX + HHGear^.dX; |
720 cc:= ropeDx + HHGear^.dX; |
721 len:= _1 / Distance(cc, cs); |
721 len:= _1 / Distance(cc, cs); |
722 cc:= cc * len; |
722 cc:= cc * len; |
723 cs:= cs * len; |
723 cs:= cs * len; |
724 |
724 |
725 HHGear^.dX:= HHGear^.X; |
725 HHGear^.dX:= Gear^.X + cc*Gear^.Elasticity - HHGear^.X; |
726 HHGear^.dY:= HHGear^.Y; |
726 HHGear^.dY:= Gear^.Y + cs*Gear^.Elasticity - HHGear^.Y; |
727 |
727 |
728 if ((Gear^.Message and gm_Down) <> 0) and (Gear^.Elasticity < Gear^.Friction) then |
728 if ((Gear^.Message and gm_Down) <> 0) and (Gear^.Elasticity < Gear^.Friction) then |
729 if not (TestCollisionXwithGear(HHGear, hwSign(Gear^.dX)) |
729 if not (TestCollisionXwithGear(HHGear, hwSign(ropeDx)) |
730 or TestCollisionYwithGear(HHGear, hwSign(Gear^.dY))) then Gear^.Elasticity:= Gear^.Elasticity + _0_3; |
730 or TestCollisionYwithGear(HHGear, hwSign(ropeDy))) then Gear^.Elasticity:= Gear^.Elasticity + _0_3; |
731 |
731 |
732 if ((Gear^.Message and gm_Up) <> 0) and (Gear^.Elasticity > _30) then |
732 if ((Gear^.Message and gm_Up) <> 0) and (Gear^.Elasticity > _30) then |
733 if not (TestCollisionXwithGear(HHGear, -hwSign(Gear^.dX)) |
733 if not (TestCollisionXwithGear(HHGear, -hwSign(ropeDx)) |
734 or TestCollisionYwithGear(HHGear, -hwSign(Gear^.dY))) then Gear^.Elasticity:= Gear^.Elasticity - _0_3; |
734 or TestCollisionYwithGear(HHGear, -hwSign(ropeDy))) then Gear^.Elasticity:= Gear^.Elasticity - _0_3; |
735 |
735 |
736 HHGear^.X:= Gear^.X + cc*Gear^.Elasticity; |
736 HHGear^.X:= Gear^.X + cc*Gear^.Elasticity; |
737 HHGear^.Y:= Gear^.Y + cs*Gear^.Elasticity; |
737 HHGear^.Y:= Gear^.Y + cs*Gear^.Elasticity; |
738 |
|
739 HHGear^.dX:= HHGear^.X - HHGear^.dX; |
|
740 HHGear^.dY:= HHGear^.Y - HHGear^.dY; |
|
741 |
738 |
742 if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then |
739 if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then |
743 HHGear^.dX:= -_0_6 * HHGear^.dX; |
740 HHGear^.dX:= -_0_6 * HHGear^.dX; |
744 if TestCollisionYwithGear(HHGear, hwSign(HHGear^.dY)) then |
741 if TestCollisionYwithGear(HHGear, hwSign(HHGear^.dY)) then |
745 HHGear^.dY:= -_0_6 * HHGear^.dY; |
742 HHGear^.dY:= -_0_6 * HHGear^.dY; |