changeset 8530:6a0cdc5bc1b1 draft

(svn r12105) -Codechange: Use TransportType instead of guessing what kind of bridge we are preparing to build
author belugas <belugas@openttd.org>
date Mon, 11 Feb 2008 01:06:44 +0000
parents 6a75c42267d1
children e1f4b0ce4884
files src/tunnelbridge_cmd.cpp
diffstat 1 files changed, 29 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/tunnelbridge_cmd.cpp
+++ b/src/tunnelbridge_cmd.cpp
@@ -177,8 +177,8 @@
 CommandCost CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
 {
 	uint bridge_type;
-	RailType railtype;
-	RoadTypes roadtypes;
+	RailType railtype = INVALID_RAILTYPE;
+	RoadTypes roadtypes = ROADTYPES_NONE;
 	uint x;
 	uint y;
 	uint sx;
@@ -197,21 +197,29 @@
 	CommandCost ret;
 	bool replace_bridge = false;
 	uint replaced_bridge_type;
+	TransportType transport_type;
 
 	/* unpack parameters */
 	bridge_type = GB(p2, 0, 8);
 
+	transport_type = (TransportType)GB(p2, 15, 2);
+	/* For now, only TRANSPORT_RAIL and TRANSPORT_ROAD are allowed.
+	 * But let not this stops us for preparing the future */
+	if (transport_type >= TRANSPORT_WATER) return CMD_ERROR;
+
 	if (p1 >= MapSize()) return CMD_ERROR;
 
 	/* type of bridge */
-	if (HasBit(p2, 15)) {
-		railtype = INVALID_RAILTYPE; // road bridge
-		roadtypes = (RoadTypes)GB(p2, 8, 3);
-		if (!AreValidRoadTypes(roadtypes) || !HasRoadTypesAvail(_current_player, roadtypes)) return CMD_ERROR;
-	} else {
-		if (!ValParamRailtype((RailType)GB(p2, 8, 8))) return CMD_ERROR;
-		railtype = (RailType)GB(p2, 8, 8);
-		roadtypes = ROADTYPES_NONE;
+	switch (transport_type) {
+		case TRANSPORT_ROAD:
+			roadtypes = (RoadTypes)GB(p2, 8, 3);
+			if (!AreValidRoadTypes(roadtypes) || !HasRoadTypesAvail(_current_player, roadtypes)) return CMD_ERROR;
+			break;
+
+		case TRANSPORT_RAIL:
+			railtype = (RailType)GB(p2, 8, 8);
+			if (!ValParamRailtype(railtype)) return CMD_ERROR;
+			break;
 	}
 
 	x = TileX(end_tile);
@@ -250,8 +258,6 @@
 
 	if (z_start != z_end) return_cmd_error(STR_BRIDGEHEADS_NOT_SAME_HEIGHT);
 
-	TransportType transport_type = railtype == INVALID_RAILTYPE ? TRANSPORT_ROAD : TRANSPORT_RAIL;
-
 	if (IsBridgeTile(tile_start) && IsBridgeTile(tile_end) &&
 			GetOtherBridgeEnd(tile_start) == tile_end &&
 			GetTunnelBridgeTransportType(tile_start) == transport_type) {
@@ -340,12 +346,16 @@
 		DiagDirection dir = AxisToDiagDir(direction);
 		Owner owner = (replace_bridge && IsTileOwner(tile_start, OWNER_TOWN)) ? OWNER_TOWN : _current_player;
 
-		if (railtype != INVALID_RAILTYPE) {
-			MakeRailBridgeRamp(tile_start, owner, bridge_type, dir, railtype);
-			MakeRailBridgeRamp(tile_end,   owner, bridge_type, ReverseDiagDir(dir), railtype);
-		} else {
-			MakeRoadBridgeRamp(tile_start, owner, bridge_type, dir, roadtypes);
-			MakeRoadBridgeRamp(tile_end,   owner, bridge_type, ReverseDiagDir(dir), roadtypes);
+		switch (transport_type) {
+			case TRANSPORT_RAIL:
+				MakeRailBridgeRamp(tile_start, owner, bridge_type, dir, railtype);
+				MakeRailBridgeRamp(tile_end,   owner, bridge_type, ReverseDiagDir(dir), railtype);
+				break;
+
+			case TRANSPORT_ROAD:
+				MakeRoadBridgeRamp(tile_start, owner, bridge_type, dir, roadtypes);
+				MakeRoadBridgeRamp(tile_end,   owner, bridge_type, ReverseDiagDir(dir), roadtypes);
+				break;
 		}
 		MarkTileDirtyByTile(tile_start);
 		MarkTileDirtyByTile(tile_end);
@@ -403,7 +413,7 @@
 		}
 	}
 
-	if (flags & DC_EXEC && railtype != INVALID_RAILTYPE) {
+	if (flags & DC_EXEC && transport_type == TRANSPORT_RAIL) {
 		Track track = AxisToTrack(direction);
 		AddSideToSignalBuffer(tile_start, INVALID_DIAGDIR, _current_player);
 		YapfNotifyTrackLayoutChange(tile_start, track);