(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
authortron
Sat, 20 May 2006 18:03:22 +0000
changeset 3878 91a8b87f641e
parent 3877 53efa8118448
child 3879 3e9cd6403d73
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
rail_cmd.c
road_cmd.c
tunnelbridge_cmd.c
--- a/rail_cmd.c	Sat May 20 16:46:37 2006 +0000
+++ b/rail_cmd.c	Sat May 20 18:03:22 2006 +0000
@@ -153,27 +153,24 @@
 
 uint GetRailFoundation(Slope tileh, TrackBits bits)
 {
-	int i;
-
-	if ((~_valid_tileh_slopes[0][tileh] & bits) == 0)
-		return 0;
-
-	if ((~_valid_tileh_slopes[1][tileh] & bits) == 0)
-		return tileh;
+	uint i;
 
-	if ((
-				(i  = 0, tileh == SLOPE_W) ||
-				(i += 2, tileh == SLOPE_S) ||
-				(i += 2, tileh == SLOPE_E) ||
-				(i += 2, tileh == SLOPE_N)
-			) && (
-				bits == TRACK_BIT_X ||
-				(i++, bits == TRACK_BIT_Y)
-			)) {
-		return i + 15;
-	} else {
-		return 0;
+	if ((~_valid_tileh_slopes[0][tileh] & bits) == 0) return 0;
+	if ((~_valid_tileh_slopes[1][tileh] & bits) == 0) return tileh;
+
+	switch (bits) {
+		case TRACK_BIT_X: i = 0; break;
+		case TRACK_BIT_Y: i = 1; break;
+		default:          return 0;
 	}
+	switch (tileh) {
+		case SLOPE_W: i += 0; break;
+		case SLOPE_S: i += 2; break;
+		case SLOPE_E: i += 4; break;
+		case SLOPE_N: i += 6; break;
+		default:      return 0;
+	}
+	return i + 15;
 }
 
 
--- a/road_cmd.c	Sat May 20 16:46:37 2006 +0000
+++ b/road_cmd.c	Sat May 20 18:03:22 2006 +0000
@@ -659,24 +659,25 @@
 
 uint GetRoadFoundation(Slope tileh, RoadBits bits)
 {
-	int i;
+	uint i;
+
 	// normal level sloped building
 	if ((~_valid_tileh_slopes_road[1][tileh] & bits) == 0) return tileh;
 
 	// inclined sloped building
-	if ((
-				(i  = 0, tileh == SLOPE_W) ||
-				(i += 2, tileh == SLOPE_S) ||
-				(i += 2, tileh == SLOPE_E) ||
-				(i += 2, tileh == SLOPE_N)
-			) && (
-				(     bits == ROAD_X) ||
-				(i++, bits == ROAD_Y)
-			)) {
-		return i + 15;
+	switch (bits) {
+		case ROAD_X: i = 0; break;
+		case ROAD_Y: i = 1; break;
+		default:     return 0;
 	}
-
-	return 0;
+	switch (tileh) {
+		case SLOPE_W: i += 0; break;
+		case SLOPE_S: i += 2; break;
+		case SLOPE_E: i += 4; break;
+		case SLOPE_N: i += 6; break;
+		default:      return 0;
+	}
+	return i + 15;
 }
 
 const byte _road_sloped_sprites[14] = {
--- a/tunnelbridge_cmd.c	Sat May 20 16:46:37 2006 +0000
+++ b/tunnelbridge_cmd.c	Sat May 20 18:03:22 2006 +0000
@@ -858,23 +858,20 @@
 
 uint GetBridgeFoundation(Slope tileh, Axis axis)
 {
-	int i;
+	uint i;
+
 	if (HASBIT(BRIDGE_FULL_LEVELED_FOUNDATION, tileh)) return tileh;
 
 	// inclined sloped building
-	if ((
-				(i  = 0, tileh == SLOPE_W) ||
-				(i += 2, tileh == SLOPE_S) ||
-				(i += 2, tileh == SLOPE_E) ||
-				(i += 2, tileh == SLOPE_N)
-			) && (
-				      axis == AXIS_X ||
-				(i++, axis == AXIS_Y)
-			)) {
-		return i + 15;
+	switch (tileh) {
+		case SLOPE_W: i = 0; break;
+		case SLOPE_S: i = 2; break;
+		case SLOPE_E: i = 4; break;
+		case SLOPE_N: i = 6; break;
+		default:      return 0;
 	}
-
-	return 0;
+	if (axis != AXIS_X) ++i;
+	return i + 15;
 }
 
 /**