summaryrefslogtreecommitdiff
path: root/src/road.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2015-10-30 17:19:01 +0000
committerfrosch <frosch@openttd.org>2015-10-30 17:19:01 +0000
commitc0a301ae606cc877a0092e8fef6b14e53e46d4fc (patch)
tree2418cae033e5d4ed407cd63aba09e2d135995598 /src/road.cpp
parentab7ebdcfd941d0f153fa54ce998cfe86beb8fbc6 (diff)
downloadopenttd-c0a301ae606cc877a0092e8fef6b14e53e46d4fc.tar.xz
(svn r27424) -Fix [FS#6374]: Towns did not connect roads to existing roads, unless they had only a single roadbit. Otoh, towns also tried to connect to single roadbit tiles such as tunnels and depots, even though they were not connectable in the direction of interest.
Diffstat (limited to 'src/road.cpp')
-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;
-
}
}