| 455 | } |
| 456 | |
| 457 | std::optional<StaticLosCollisionData> GetStaticLosCollision(const Vector3& origin, int roomNumber, const Vector3& dir, float dist, bool collideOnlySolid) |
| 458 | { |
| 459 | // Run through static LOS collisions. |
| 460 | auto los = GetLosCollision(origin, roomNumber, dir, dist, false, false, true); |
| 461 | for (auto& staticLos : los.Statics) |
| 462 | { |
| 463 | // Check if static is solid (if applicable). |
| 464 | if (collideOnlySolid && !(staticLos.Static->Flags & StaticMeshFlags::SM_SOLID)) |
| 465 | continue; |
| 466 | |
| 467 | // Check if static is collidable. |
| 468 | if (!(staticLos.Static->Flags & StaticMeshFlags::SM_COLLISION)) |
| 469 | continue; |
| 470 | |
| 471 | return staticLos; |
| 472 | } |
| 473 | |
| 474 | return std::nullopt; |
| 475 | } |
| 476 | |
| 477 | std::pair<GameVector, GameVector> GetRayFrom2DPosition(const Vector2& screenPos) |
| 478 | { |