| 1409 | } |
| 1410 | |
| 1411 | bool CheckItemCollideCamera(ItemInfo* item) |
| 1412 | { |
| 1413 | bool isCloseEnough = Vector3i::Distance(item->Pose.Position, Camera.pos.ToVector3i()) <= COLL_CHECK_THRESHOLD; |
| 1414 | |
| 1415 | if (!isCloseEnough || !item->Collidable || item->IsLara() || Objects[item->ObjectNumber].Hidden) |
| 1416 | return false; |
| 1417 | |
| 1418 | // TODO: Find a better way to define objects which are collidable with camera. |
| 1419 | auto* object = &Objects[item->ObjectNumber]; |
| 1420 | if (object->intelligent || object->isPickup || object->isPuzzleHole || object->collision == nullptr) |
| 1421 | return false; |
| 1422 | |
| 1423 | // Check extents; if any 2 bounds are smaller than threshold, discard. |
| 1424 | auto extents = GameBoundingBox(item).ToBoundingOrientedBox(item->Pose).Extents; |
| 1425 | if ((abs(extents.x) < COLL_DISCARD_THRESHOLD && abs(extents.y) < COLL_DISCARD_THRESHOLD) || |
| 1426 | (abs(extents.x) < COLL_DISCARD_THRESHOLD && abs(extents.z) < COLL_DISCARD_THRESHOLD) || |
| 1427 | (abs(extents.y) < COLL_DISCARD_THRESHOLD && abs(extents.z) < COLL_DISCARD_THRESHOLD)) |
| 1428 | { |
| 1429 | return false; |
| 1430 | } |
| 1431 | |
| 1432 | return true; |
| 1433 | } |
| 1434 | |
| 1435 | static std::vector<int> FillCollideableItemList() |
| 1436 | { |
no test coverage detected