MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / setLevelCrossingFlags

Function setLevelCrossingFlags

src/OpenLoco/src/Map/TileManager.cpp:1238–1287  ·  view source on GitHub ↗

0x004795D1

Source from the content-addressed store, hash-verified

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)

Callers 2

removeTrackFunction · 0.85
removeRoadFunction · 0.85

Calls 9

baseHeightMethod · 0.80
isAiAllocatedMethod · 0.80
trackIdMethod · 0.80
roadIdMethod · 0.80
setUnk7_10Method · 0.80
getFunction · 0.70
hasLevelCrossingMethod · 0.45
setHasLevelCrossingMethod · 0.45

Tested by

no test coverage detected