| 81 | } |
| 82 | |
| 83 | static Viewport* findBestViewportForEntity(const World::Pos3& position, EntityId headId) |
| 84 | { |
| 85 | auto vpPos = World::gameToScreen(position, WindowManager::getCurrentRotation()); |
| 86 | |
| 87 | auto main = WindowManager::getMainWindow(); |
| 88 | if (main != nullptr && main->viewports[0] != nullptr) |
| 89 | { |
| 90 | if (main->savedView.isEntityView() && main->savedView.entityId == headId) |
| 91 | { |
| 92 | return main->viewports[0]; |
| 93 | } |
| 94 | if (main->viewports[0]->contains(vpPos)) |
| 95 | { |
| 96 | return main->viewports[0]; |
| 97 | } |
| 98 | } |
| 99 | |
| 100 | for (size_t i = 0; i < WindowManager::count(); i++) |
| 101 | { |
| 102 | auto w = WindowManager::get(i); |
| 103 | if (w->type == WindowType::main || w->type == WindowType::news) |
| 104 | { |
| 105 | continue; |
| 106 | } |
| 107 | auto viewport = w->viewports[0]; |
| 108 | if (viewport == nullptr) |
| 109 | { |
| 110 | continue; |
| 111 | } |
| 112 | if (w->savedView.isEntityView() && w->savedView.entityId == headId) |
| 113 | { |
| 114 | return viewport; |
| 115 | } |
| 116 | if (viewport->contains(vpPos)) |
| 117 | { |
| 118 | return viewport; |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | return nullptr; |
| 123 | } |
| 124 | |
| 125 | static AudioAttributes getVehicleAudioAttributes(const Vehicles::VehicleBase& base, const Vehicles::VehicleSound& soundParams, const Viewport& viewport) |
| 126 | { |
no test coverage detected