hedgewars/GSHandlers.inc
changeset 4800 83ee0a10903b
parent 4799 0f408159a33f
child 4801 c0d3c2f5e952
equal deleted inserted replaced
4799:0f408159a33f 4800:83ee0a10903b
  1360         begin
  1360         begin
  1361         HHGear^.dY := HHGear^.dY + cGravity;
  1361         HHGear^.dY := HHGear^.dY + cGravity;
  1362         if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed / HHGear^.Density;
  1362         if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed / HHGear^.Density;
  1363         end;
  1363         end;
  1364 
  1364 
       
  1365     // vector between hedgehog and rope attaching point
  1365     ropeDx := HHGear^.X - Gear^.X;
  1366     ropeDx := HHGear^.X - Gear^.X;
  1366     // vector between hedgehog and rope attaching point
       
  1367     ropeDy := HHGear^.Y - Gear^.Y;
  1367     ropeDy := HHGear^.Y - Gear^.Y;
  1368 
  1368 
  1369     mdX := ropeDx + HHGear^.dX;
  1369     mdX := ropeDx + HHGear^.dX;
  1370     mdY := ropeDy + HHGear^.dY;
  1370     mdY := ropeDy + HHGear^.dY;
  1371     len := _1 / Distance(mdX, mdY);
  1371     len := _1 / Distance(mdX, mdY);
       
  1372     // rope vector plus hedgehog direction vector normalized
  1372     mdX := mdX * len;
  1373     mdX := mdX * len;
  1373     // rope vector plus hedgehog direction vector normalized
       
  1374     mdY := mdY * len;
  1374     mdY := mdY * len;
  1375 
  1375 
       
  1376     // for visual purposes only
  1376     Gear^.dX := mdX;
  1377     Gear^.dX := mdX;
  1377     // for visual purposes only
       
  1378     Gear^.dY := mdY;
  1378     Gear^.dY := mdY;
  1379 
  1379 
  1380     /////
  1380     /////
  1381     tx := HHGear^.X;
  1381     tx := HHGear^.X;
  1382     ty := HHGear^.Y;
  1382     ty := HHGear^.Y;
  1500         len := _0_8 / hwSqrt(len);
  1500         len := _0_8 / hwSqrt(len);
  1501         HHGear^.dX := HHGear^.dX * len;
  1501         HHGear^.dX := HHGear^.dX * len;
  1502         HHGear^.dY := HHGear^.dY * len;
  1502         HHGear^.dY := HHGear^.dY * len;
  1503         end;
  1503         end;
  1504 
  1504 
  1505 
  1505     if RopePoints.Count > 0 then
  1506     if (Gear^.Message and gmAttack) <> 0 then
  1506         begin
       
  1507         // backup gear location
       
  1508         tx:= Gear^.X;
       
  1509         ty:= Gear^.Y;
       
  1510 
       
  1511         // set gear location to the remote end of the rope, the attachment point
       
  1512         Gear^.X:= RopePoints.ar[0].X;
       
  1513         Gear^.Y:= RopePoints.ar[0].Y;
       
  1514 
       
  1515         CheckCollisionWithLand(Gear);
       
  1516 
       
  1517         // restore gear location
       
  1518         Gear^.X:= tx;
       
  1519         Gear^.Y:= ty;
       
  1520         end
       
  1521     else
       
  1522         CheckCollisionWithLand(Gear);
       
  1523 
       
  1524     if ((Gear^.Message and gmAttack) <> 0)
       
  1525     or ((Gear^.State and gstCollision) = 0) then
  1507         if (Gear^.State and gsttmpFlag) <> 0 then
  1526         if (Gear^.State and gsttmpFlag) <> 0 then
  1508             with Gear^.Hedgehog^ do
  1527             with Gear^.Hedgehog^ do
  1509                 begin
  1528                 begin
  1510                 PlaySound(sndRopeRelease);
  1529                 PlaySound(sndRopeRelease);
  1511                 if CurAmmoType <> amParachute then
  1530                 if CurAmmoType <> amParachute then
  1515                 end
  1534                 end
  1516     else
  1535     else
  1517     else
  1536     else
  1518         if (Gear^.State and gsttmpFlag) = 0 then
  1537         if (Gear^.State and gsttmpFlag) = 0 then
  1519             Gear^.State := Gear^.State or gsttmpFlag;
  1538             Gear^.State := Gear^.State or gsttmpFlag;
       
  1539 
  1520 end;
  1540 end;
  1521 
  1541 
  1522 procedure doStepRopeAttach(Gear: PGear);
  1542 procedure doStepRopeAttach(Gear: PGear);
  1523 var 
  1543 var 
  1524     HHGear: PGear;
  1544     HHGear: PGear;