(svn r5199) Make the control flow of GetTileTrackStatus_TunnelBridge() more comprehensible
authortron
Fri, 09 Jun 2006 15:27:17 +0000
changeset 3996 5a1d1fc1bd07
parent 3995 3a2d054689d6
child 3997 29c77eab14a4
(svn r5199) Make the control flow of GetTileTrackStatus_TunnelBridge() more comprehensible
tunnelbridge_cmd.c
--- a/tunnelbridge_cmd.c	Fri Jun 09 15:24:04 2006 +0000
+++ b/tunnelbridge_cmd.c	Fri Jun 09 15:27:17 2006 +0000
@@ -1241,41 +1241,26 @@
 
 static uint32 GetTileTrackStatus_TunnelBridge(TileIndex tile, TransportType mode)
 {
-	uint32 result;
-
 	if (IsTunnel(tile)) {
-		if (GetTunnelTransportType(tile) == mode) {
-			return DiagDirToAxis(GetTunnelDirection(tile)) == AXIS_X ? 0x101 : 0x202;
-		}
-	} else if (IsBridge(tile)) { // XXX is this necessary?
+		if (GetTunnelTransportType(tile) != mode) return 0;
+		return (DiagDirToAxis(GetTunnelDirection(tile)) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y) * 0x101;
+	} else {
 		if (IsBridgeRamp(tile)) {
 			if (GetBridgeTransportType(tile) != mode) return 0;
 			return (DiagDirToAxis(GetBridgeRampDirection(tile)) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y) * 0x101;
 		} else {
-			result = 0;
+			uint32 result = 0;
+
 			if (GetBridgeTransportType(tile) == mode) {
 				result = (GetBridgeAxis(tile) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y) * 0x101;
 			}
-			if (IsTransportUnderBridge(tile)) {
-				if (GetTransportTypeUnderBridge(tile) != mode) return result;
-			} else {
-				if (IsClearUnderBridge(tile)) {
-					return result;
-				} else {
-					if (mode != TRANSPORT_WATER) return result;
-				}
+			if ((IsTransportUnderBridge(tile) && mode == GetTransportTypeUnderBridge(tile)) ||
+					(IsWaterUnderBridge(tile)     && mode == TRANSPORT_WATER)) {
+				result |= (GetBridgeAxis(tile) == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X) * 0x101;
 			}
-			/* If we've not returned yet, there is a compatible
-			 * transport or water beneath, so we can add it to
-			 * result */
-			/* Why is this xor'd ? Can't it just be or'd? */
-			result ^= (GetBridgeAxis(tile) == AXIS_X ? 0x202 : 0x101);
+			return result;
 		}
-		return result;
-	} else {
-		assert(0); /* This should never occur */
 	}
-	return 0;
 }
 
 static void ChangeTileOwner_TunnelBridge(TileIndex tile, PlayerID old_player, PlayerID new_player)