hedgewars/GSHandlers.inc
changeset 1547 4251f9598d54
parent 1545 76b90ff9739a
child 1548 682c0c968997
equal deleted inserted replaced
1546:2bd33f2287cc 1547:4251f9598d54
   569 
   569 
   570 if Gear^.Timer mod cHHStepTicks = 0 then
   570 if Gear^.Timer mod cHHStepTicks = 0 then
   571 	begin
   571 	begin
   572 	b:= true;
   572 	b:= true;
   573 	if Gear^.dX.isNegative then
   573 	if Gear^.dX.isNegative then
   574 		HHGear^.Message:= (HHGear^.Message and gm_Attack) or gm_Left
   574 		HHGear^.Message:= (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Left
   575 	else
   575 	else
   576 		HHGear^.Message:= (HHGear^.Message and gm_Attack) or gm_Right;
   576 		HHGear^.Message:= (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Right;
   577 
   577 
   578 	if ((HHGear^.State and gstMoving) = 0) then
   578 	if ((HHGear^.State and gstMoving) = 0) then
   579 		begin
   579 		begin
   580 		HHGear^.State:= HHGear^.State and not gstAttacking;
   580 		HHGear^.State:= HHGear^.State and not gstAttacking;
   581 		prevX:= hwRound(HHGear^.X);
   581 		prevX:= hwRound(HHGear^.X);
   626 ////////////////////////////////////////////////////////////////////////////////
   626 ////////////////////////////////////////////////////////////////////////////////
   627 
   627 
   628 procedure doStepRopeWork(Gear: PGear);
   628 procedure doStepRopeWork(Gear: PGear);
   629 const flCheck: boolean = false;
   629 const flCheck: boolean = false;
   630 var HHGear: PGear;
   630 var HHGear: PGear;
   631 	len, cs, cc, tx, ty, nx, ny: hwFloat;
   631 	len, cs, cc, tx, ty, nx, ny, ropeDx, ropeDy: hwFloat;
   632 	lx, ly: LongInt;
   632 	lx, ly: LongInt;
   633 
   633 
   634 	procedure DeleteMe;
   634 	procedure DeleteMe;
   635 	begin
   635 	begin
   636 	with HHGear^ do
   636 	with HHGear^ do
   649 	begin
   649 	begin
   650 	DeleteMe;
   650 	DeleteMe;
   651 	exit
   651 	exit
   652 	end;
   652 	end;
   653 
   653 
   654 Gear^.dX:= HHGear^.X - Gear^.X;
   654 ropeDx:= HHGear^.X - Gear^.X; // vector between hedgehog and rope attaching point
   655 Gear^.dY:= HHGear^.Y - Gear^.Y;
   655 ropeDy:= HHGear^.Y - Gear^.Y;
   656 
   656 
   657 if (Gear^.Message and gm_Left  <> 0) then HHGear^.dX:= HHGear^.dX - _0_0002 else
   657 if (Gear^.Message and gm_Left  <> 0) then HHGear^.dX:= HHGear^.dX - _0_0002 else
   658 if (Gear^.Message and gm_Right <> 0) then HHGear^.dX:= HHGear^.dX + _0_0002;
   658 if (Gear^.Message and gm_Right <> 0) then HHGear^.dX:= HHGear^.dX + _0_0002;
   659 
   659 
   660 if not TestCollisionYwithGear(HHGear, 1) then HHGear^.dY:= HHGear^.dY + cGravity;
   660 if not TestCollisionYwithGear(HHGear, 1) then HHGear^.dY:= HHGear^.dY + cGravity;
   661 
   661 
   662 cs:= Gear^.dY + HHGear^.dY;
   662 cc:= ropeDx + HHGear^.dX;
   663 cc:= Gear^.dX + HHGear^.dX;
   663 cs:= ropeDy + HHGear^.dY;
   664 len:= _1 / Distance(cc, cs);
   664 len:= _1 / Distance(cc, cs);
   665 cc:= cc * len; // rope vector plus hedgehog direction vector normalized
   665 cc:= cc * len; // rope vector plus hedgehog direction vector normalized
   666 cs:= cs * len;
   666 cs:= cs * len;
   667 
   667 
   668 nx:= SignAs(cs, HHGear^.dX) * 7; // hedgehog direction normalized with length 7
   668 nx:= SignAs(cs, HHGear^.dX) * 7; // hedgehog direction normalized with length 7
   694 				TryDo(RopePoints.Count <= MAXROPEPOINTS, 'Rope points overflow', true);
   694 				TryDo(RopePoints.Count <= MAXROPEPOINTS, 'Rope points overflow', true);
   695 				Gear^.Elasticity:= Gear^.Elasticity - len;
   695 				Gear^.Elasticity:= Gear^.Elasticity - len;
   696 				Gear^.Friction:= Gear^.Friction - len;
   696 				Gear^.Friction:= Gear^.Friction - len;
   697 				break
   697 				break
   698 				end;
   698 				end;
   699 			len:= len - _0_5
   699 			len:= len - _3
   700 			end;
   700 			end;
   701 	end else
   701 	end else
   702 	if RopePoints.Count > 0 then // check whether the last dividing point could be removed
   702 	if RopePoints.Count > 0 then // check whether the last dividing point could be removed
   703 		begin
   703 		begin
   704 		tx:= RopePoints.ar[Pred(RopePoints.Count)].X;
   704 		tx:= RopePoints.ar[Pred(RopePoints.Count)].X;