(svn r13485) -Fix: let ships also navigate on half-tile sloped watery rail tiles.
authorrubidium
Thu, 12 Jun 2008 11:15:43 +0000
changeset 10932 379576f9f8d5
parent 10929 4989211616f8
child 10935 cdbe711bd2ae
(svn r13485) -Fix: let ships also navigate on half-tile sloped watery rail tiles.
src/rail_cmd.cpp
--- a/src/rail_cmd.cpp	Thu Jun 12 09:25:04 2008 +0000
+++ b/src/rail_cmd.cpp	Thu Jun 12 11:15:43 2008 +0000
@@ -1383,6 +1383,8 @@
 			}
 
 			if (water_ground) {
+				if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
+
 				/* The track was removed, and left a coast tile. Now also clear the water. */
 				if (flags & DC_EXEC) DoClearSquare(tile);
 				cost.AddCost(_price.clear_water);
@@ -2112,6 +2114,19 @@
 
 static TrackStatus GetTileTrackStatus_Track(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
 {
+	/* Case of half tile slope with water. */
+	if (mode == TRANSPORT_WATER && IsPlainRailTile(tile) && GetRailGroundType(tile) == RAIL_GROUND_WATER) {
+		TrackBits tb = GetTrackBits(tile);
+		switch (tb) {
+			default: NOT_REACHED();
+			case TRACK_BIT_UPPER: tb = TRACK_BIT_LOWER; break;
+			case TRACK_BIT_LOWER: tb = TRACK_BIT_UPPER; break;
+			case TRACK_BIT_LEFT:  tb = TRACK_BIT_RIGHT; break;
+			case TRACK_BIT_RIGHT: tb = TRACK_BIT_LEFT;  break;
+		}
+		return CombineTrackStatus(TrackBitsToTrackdirBits(tb), TRACKDIR_BIT_NONE);
+	}
+
 	if (mode != TRANSPORT_RAIL) return 0;
 
 	TrackBits trackbits = TRACK_BIT_NONE;