| 301 | } |
| 302 | |
| 303 | void SpeedboatDoBoatShift(ItemInfo* speedboatItem, int itemNumber) |
| 304 | { |
| 305 | short itemNumber2 = g_Level.Rooms[speedboatItem->RoomNumber].itemNumber; |
| 306 | while (itemNumber2 != NO_VALUE) |
| 307 | { |
| 308 | auto* item = &g_Level.Items[itemNumber2]; |
| 309 | |
| 310 | if (item->ObjectNumber == ID_SPEEDBOAT && itemNumber2 != itemNumber && Lara.Context.Vehicle != itemNumber2) |
| 311 | { |
| 312 | int x = item->Pose.Position.x - speedboatItem->Pose.Position.x; |
| 313 | int z = item->Pose.Position.z - speedboatItem->Pose.Position.z; |
| 314 | |
| 315 | int distance = pow(x, 2) + pow(z, 2); |
| 316 | int radius = pow(SPEEDBOAT_RADIUS * 2, 2); |
| 317 | if (distance < radius) |
| 318 | { |
| 319 | speedboatItem->Pose.Position.x = item->Pose.Position.x - x * radius / distance; |
| 320 | speedboatItem->Pose.Position.z = item->Pose.Position.z - z * radius / distance; |
| 321 | } |
| 322 | |
| 323 | return; |
| 324 | } |
| 325 | |
| 326 | // TODO: mine and gondola |
| 327 | |
| 328 | itemNumber2 = item->NextItem; |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | short SpeedboatDoShift(ItemInfo* speedboatItem, Vector3i* pos, Vector3i* old) |
| 333 | { |