Changeset - r18068:9186e0beb588
[Not reviewed]
master
0 1 0
terkhen - 13 years ago 2011-09-06 13:32:37
terkhen@openttd.org
(svn r22899) -Add: Allow towns to build bridges over canals and rivers.
1 file changed with 20 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/town_cmd.cpp
Show inline comments
 
@@ -971,12 +971,11 @@ static bool GrowTownWithBridge(const Tow
 
	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 @@ static bool GrowTownWithBridge(const Tow
 
	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;
0 comments (0 inline, 0 general)