hedgewars/GSHandlers.inc
changeset 5835 812be8a96927
parent 5807 5c8fe58dead5
child 5839 7ea0745912f7
equal deleted inserted replaced
5834:f9944a75b350 5835:812be8a96927
  1403 
  1403 
  1404 procedure doStepRopeWork(Gear: PGear);
  1404 procedure doStepRopeWork(Gear: PGear);
  1405 var 
  1405 var 
  1406     HHGear: PGear;
  1406     HHGear: PGear;
  1407     len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat;
  1407     len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat;
  1408     lx, ly: LongInt;
  1408     lx, ly, cd: LongInt;
  1409     haveCollision,
  1409     haveCollision,
  1410     haveDivided: boolean;
  1410     haveDivided: boolean;
  1411 
  1411 
  1412 procedure DeleteMe;
  1412 procedure DeleteMe;
  1413 begin
  1413 begin
  1444 
  1444 
  1445     if (Gear^.Message and gmLeft  <> 0) then HHGear^.dX := HHGear^.dX - _0_0002
  1445     if (Gear^.Message and gmLeft  <> 0) then HHGear^.dX := HHGear^.dX - _0_0002
  1446     else
  1446     else
  1447         if (Gear^.Message and gmRight <> 0) then HHGear^.dX := HHGear^.dX + _0_0002;
  1447         if (Gear^.Message and gmRight <> 0) then HHGear^.dX := HHGear^.dX + _0_0002;
  1448 
  1448 
  1449     if not TestCollisionYwithGear(HHGear, 1) then
       
  1450         begin
       
  1451         HHGear^.dY := HHGear^.dY + cGravity;
       
  1452         if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed / HHGear^.Density;
       
  1453         end;
       
  1454 
       
  1455     // vector between hedgehog and rope attaching point
  1449     // vector between hedgehog and rope attaching point
  1456     ropeDx := HHGear^.X - Gear^.X;
  1450     ropeDx := HHGear^.X - Gear^.X;
  1457     ropeDy := HHGear^.Y - Gear^.Y;
  1451     ropeDy := HHGear^.Y - Gear^.Y;
       
  1452 
       
  1453     if not TestCollisionYwithGear(HHGear, 1) then
       
  1454         begin
       
  1455 
       
  1456         // depending on the rope vector we know which X-side to check for collision
       
  1457         // in order to find out if the hog can still be moved by gravity
       
  1458         if ropeDx.isNegative = RopeDy.IsNegative then
       
  1459             cd:= -1
       
  1460         else
       
  1461             cd:= 1;
       
  1462 
       
  1463         // apply gravity if there is no obstacle
       
  1464         if not TestCollisionXwithGear(HHGear, cd) then
       
  1465             HHGear^.dY := HHGear^.dY + cGravity;
       
  1466 
       
  1467         if (GameFlags and gfMoreWind) <> 0 then
       
  1468             // apply wind if there's no obstacle
       
  1469             if not TestCollisionXwithGear(HHGear, hwSign(cWindSpeed)) then
       
  1470                 HHGear^.dX := HHGear^.dX + cWindSpeed / HHGear^.Density;
       
  1471         end;
  1458 
  1472 
  1459     mdX := ropeDx + HHGear^.dX;
  1473     mdX := ropeDx + HHGear^.dX;
  1460     mdY := ropeDy + HHGear^.dY;
  1474     mdY := ropeDy + HHGear^.dY;
  1461     len := _1 / Distance(mdX, mdY);
  1475     len := _1 / Distance(mdX, mdY);
  1462     // rope vector plus hedgehog direction vector normalized
  1476     // rope vector plus hedgehog direction vector normalized