equal
deleted
inserted
replaced
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; |