summaryrefslogtreecommitdiff
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
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.
-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;
-
}
}