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 |