changeset 18078:3f5752deb867 draft

(svn r22899) -Add: Allow towns to build bridges over canals and rivers.
author terkhen <terkhen@openttd.org>
date Tue, 06 Sep 2011 13:32:37 +0000
parents 8277c23f5e3c
children 3c68da1f84c8
files src/town_cmd.cpp
diffstat 1 files changed, 20 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -971,12 +971,11 @@
 	assert(bridge_dir < DIAGDIR_END);
 
 	const Slope slope = GetTileSlope(tile, NULL);
-	if (slope == SLOPE_FLAT) return false; // no slope, no bridge
 
 	/* Make sure the direction is compatible with the slope.
 	 * Well we check if the slope has an up bit set in the
 	 * reverse direction. */
-	if (slope & InclinedSlope(bridge_dir)) return false;
+	if (slope != SLOPE_FLAT && slope & InclinedSlope(bridge_dir)) return false;
 
 	/* Assure that the bridge is connectable to the start side */
 	if (!(GetTownRoadBits(TileAddByDiagDir(tile, ReverseDiagDir(bridge_dir))) & DiagDirToRoadBits(bridge_dir))) return false;
@@ -986,13 +985,25 @@
 	TileIndex bridge_tile = tile; // Used to store the other waterside
 
 	const int delta = TileOffsByDiagDir(bridge_dir);
-	do {
-		if (bridge_length++ >= 11) {
-			/* Max 11 tile long bridges */
-			return false;
-		}
-		bridge_tile += delta;
-	} while (TileX(bridge_tile) != 0 && TileY(bridge_tile) != 0 && IsWaterTile(bridge_tile));
+
+	if (slope == SLOPE_FLAT) {
+		/* Bridges starting on flat tiles are only allowed when crossing rivers. */
+		do {
+			if (bridge_length++ >= 4) {
+				/* Allow to cross rivers, not big lakes. */
+				return false;
+			}
+			bridge_tile += delta;
+		} while (IsValidTile(bridge_tile) && IsWaterTile(bridge_tile) && !IsSea(bridge_tile));
+	} else {
+		do {
+			if (bridge_length++ >= 11) {
+				/* Max 11 tile long bridges */
+				return false;
+			}
+			bridge_tile += delta;
+		} while (IsValidTile(bridge_tile) && IsWaterTile(bridge_tile));
+	}
 
 	/* no water tiles in between? */
 	if (bridge_length == 1) return false;