hedgewars/GSHandlers.inc
changeset 1548 682c0c968997
parent 1547 4251f9598d54
child 1551 c747e69f98f3
equal deleted inserted replaced
1547:4251f9598d54 1548:682c0c968997
   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;