summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/road.cpp63
1 files changed, 33 insertions, 30 deletions
diff --git a/src/road.cpp b/src/road.cpp
index 57c5da5d4..f51597538 100644
--- a/src/road.cpp
+++ b/src/road.cpp
@@ -57,41 +57,44 @@ RoadBits CleanUpRoadBits(const TileIndex tile, RoadBits org_rb)
bool connective = false;
const RoadBits mirrored_rb = MirrorRoadBits(target_rb);
- switch (GetTileType(neighbor_tile)) {
- /* Always connective ones */
- case MP_CLEAR: case MP_TREES:
- connective = true;
- break;
-
- /* The conditionally connective ones */
- case MP_TUNNELBRIDGE:
- case MP_STATION:
- case MP_ROAD: {
- const RoadBits neighbor_rb = GetAnyRoadBits(neighbor_tile, ROADTYPE_ROAD) | GetAnyRoadBits(neighbor_tile, ROADTYPE_TRAM);
-
- /* Accept only connective tiles */
- connective = (neighbor_rb & mirrored_rb) || // Neighbor has got the fitting RoadBit
- HasExactlyOneBit(neighbor_rb); // Neighbor has got only one Roadbit
-
- break;
+ if (IsValidTile(neighbor_tile)) {
+ switch (GetTileType(neighbor_tile)) {
+ /* Always connective ones */
+ case MP_CLEAR: case MP_TREES:
+ connective = true;
+ break;
+
+ /* The conditionally connective ones */
+ case MP_TUNNELBRIDGE:
+ case MP_STATION:
+ case MP_ROAD:
+ if (IsNormalRoadTile(neighbor_tile)) {
+ /* Always connective */
+ connective = true;
+ } else {
+ const RoadBits neighbor_rb = GetAnyRoadBits(neighbor_tile, ROADTYPE_ROAD) | GetAnyRoadBits(neighbor_tile, ROADTYPE_TRAM);
+
+ /* Accept only connective tiles */
+ connective = (neighbor_rb & mirrored_rb) != ROAD_NONE;
+ }
+ break;
+
+ case MP_RAILWAY:
+ connective = IsPossibleCrossing(neighbor_tile, DiagDirToAxis(dir));
+ break;
+
+ case MP_WATER:
+ /* Check for real water tile */
+ connective = !IsWater(neighbor_tile);
+ break;
+
+ /* The definitely not connective ones */
+ default: break;
}
-
- case MP_RAILWAY:
- connective = IsPossibleCrossing(neighbor_tile, DiagDirToAxis(dir));
- break;
-
- case MP_WATER:
- /* Check for real water tile */
- connective = !IsWater(neighbor_tile);
- break;
-
- /* The definitely not connective ones */
- default: break;
}
/* If the neighbor tile is inconnective, remove the planed road connection to it */
if (!connective) org_rb ^= target_rb;
-
}
}