(svn r5580) -Regression: Under certain circumstances it was possible to remove/convert bridges while a vehicle was on it. Fix this by properly calculating the height of a bridge
authortron
Sat, 22 Jul 2006 07:28:04 +0000
changeset 4156 22b62f705930
parent 4155 dd30a86cf2a3
child 4157 8d0051fdde68
(svn r5580) -Regression: Under certain circumstances it was possible to remove/convert bridges while a vehicle was on it. Fix this by properly calculating the height of a bridge
tunnelbridge_cmd.c
--- a/tunnelbridge_cmd.c	Fri Jul 21 06:37:09 2006 +0000
+++ b/tunnelbridge_cmd.c	Sat Jul 22 07:28:04 2006 +0000
@@ -597,13 +597,12 @@
 
 static uint GetBridgeHeightRamp(TileIndex t)
 {
-	/* Return the height there (the height of the NORTH CORNER)
-	 * If the end of the bridge is on a tile with all corners except the north corner raised,
-	 * the z coordinate is 1 height level too low. Compensate for that */
-	return
-		TilePixelHeight(t) +
-		(GetTileSlope(t, NULL) == SLOPE_WSE ? TILE_HEIGHT : 0) +
-		TILE_HEIGHT;
+	uint h;
+	uint tileh = GetTileSlope(t, &h);
+	uint f = GetBridgeFoundation(tileh, DiagDirToAxis(GetBridgeRampDirection(t)));
+
+	// one height level extra if the ramp is on a flat foundation
+	return h + TILE_HEIGHT + (IS_INT_INSIDE(f, 1, 15) ? TILE_HEIGHT : 0);
 }