0x004795D1
| 1236 | |
| 1237 | // 0x004795D1 |
| 1238 | void setLevelCrossingFlags(const World::Pos3 pos) |
| 1239 | { |
| 1240 | auto findLevelTrackAndRoad = [pos](auto&& trackFunction, auto&& roadFunction) { |
| 1241 | auto tile = World::TileManager::get(pos); |
| 1242 | for (auto& el : tile) |
| 1243 | { |
| 1244 | if (el.baseHeight() != pos.z) |
| 1245 | { |
| 1246 | continue; |
| 1247 | } |
| 1248 | if (el.isAiAllocated()) |
| 1249 | { |
| 1250 | continue; |
| 1251 | } |
| 1252 | auto* elTrack = el.as<World::TrackElement>(); |
| 1253 | if (elTrack != nullptr) |
| 1254 | { |
| 1255 | if (elTrack->trackId() == 0) |
| 1256 | { |
| 1257 | trackFunction(*elTrack); |
| 1258 | } |
| 1259 | } |
| 1260 | auto* elRoad = el.as<World::RoadElement>(); |
| 1261 | if (elRoad != nullptr) |
| 1262 | { |
| 1263 | if (elRoad->roadId() == 0) |
| 1264 | { |
| 1265 | roadFunction(*elRoad); |
| 1266 | } |
| 1267 | } |
| 1268 | } |
| 1269 | }; |
| 1270 | |
| 1271 | bool hasRoad = false; |
| 1272 | bool hasTrack = false; |
| 1273 | findLevelTrackAndRoad( |
| 1274 | [&hasTrack](World::TrackElement& elTrack) { hasTrack |= elTrack.hasLevelCrossing(); }, |
| 1275 | [&hasRoad](World::RoadElement& elRoad) { hasRoad |= elRoad.hasLevelCrossing(); }); |
| 1276 | |
| 1277 | if (hasRoad ^ hasTrack) |
| 1278 | { |
| 1279 | findLevelTrackAndRoad( |
| 1280 | [hasTrack](World::TrackElement& elTrack) { if (hasTrack) { elTrack.setHasLevelCrossing(false); } }, |
| 1281 | [hasRoad](World::RoadElement& elRoad) { if (hasRoad) { |
| 1282 | elRoad.setHasLevelCrossing(false); |
| 1283 | elRoad.setUnk7_10(false); |
| 1284 | elRoad.setLevelCrossingObjectId(0); |
| 1285 | } }); |
| 1286 | } |
| 1287 | } |
| 1288 | |
| 1289 | // 0x004690FC |
| 1290 | void setTerrainStyleAsCleared(const Pos2& pos) |
no test coverage detected