src/rail_cmd.cpp
branch0.6
changeset 11129 72b8e47f86d8
parent 10323 57d8fd25473e
equal deleted inserted replaced
11128:b62a7b45babf 11129:72b8e47f86d8
  1105 {
  1105 {
  1106 	Track track = (Track)GB(p1, 0, 3);
  1106 	Track track = (Track)GB(p1, 0, 3);
  1107 
  1107 
  1108 	if (!ValParamTrackOrientation(track) ||
  1108 	if (!ValParamTrackOrientation(track) ||
  1109 			!IsTileType(tile, MP_RAILWAY) ||
  1109 			!IsTileType(tile, MP_RAILWAY) ||
       
  1110 			!HasTrack(tile, track) ||
  1110 			!EnsureNoTrainOnTrack(tile, track) ||
  1111 			!EnsureNoTrainOnTrack(tile, track) ||
  1111 			!HasSignalOnTrack(tile, track)) {
  1112 			!HasSignalOnTrack(tile, track)) {
  1112 		return CMD_ERROR;
  1113 		return CMD_ERROR;
  1113 	}
  1114 	}
  1114 
  1115 
  1374 				ret = DoCommand(tile, 0, track, flags, CMD_REMOVE_SINGLE_RAIL);
  1375 				ret = DoCommand(tile, 0, track, flags, CMD_REMOVE_SINGLE_RAIL);
  1375 				if (CmdFailed(ret)) return CMD_ERROR;
  1376 				if (CmdFailed(ret)) return CMD_ERROR;
  1376 				cost.AddCost(ret);
  1377 				cost.AddCost(ret);
  1377 			}
  1378 			}
  1378 
  1379 
  1379 			if (water_ground) {
  1380 			/* when bankrupting, don't make water dirty, there could be a ship on lower halftile */
       
  1381 			if (water_ground && !(flags & DC_BANKRUPT)) {
       
  1382 				if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
       
  1383 
  1380 				/* The track was removed, and left a coast tile. Now also clear the water. */
  1384 				/* The track was removed, and left a coast tile. Now also clear the water. */
  1381 				if (flags & DC_EXEC) DoClearSquare(tile);
  1385 				if (flags & DC_EXEC) DoClearSquare(tile);
  1382 				cost.AddCost(_price.clear_water);
  1386 				cost.AddCost(_price.clear_water);
  1383 			}
  1387 			}
  1384 
  1388 
  2096 }
  2100 }
  2097 
  2101 
  2098 
  2102 
  2099 static TrackStatus GetTileTrackStatus_Track(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
  2103 static TrackStatus GetTileTrackStatus_Track(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
  2100 {
  2104 {
       
  2105 	/* Case of half tile slope with water. */
       
  2106 	if (mode == TRANSPORT_WATER && IsPlainRailTile(tile) && GetRailGroundType(tile) == RAIL_GROUND_WATER) {
       
  2107 		TrackBits tb = GetTrackBits(tile);
       
  2108 		switch (tb) {
       
  2109 			default: NOT_REACHED();
       
  2110 			case TRACK_BIT_UPPER: tb = TRACK_BIT_LOWER; break;
       
  2111 			case TRACK_BIT_LOWER: tb = TRACK_BIT_UPPER; break;
       
  2112 			case TRACK_BIT_LEFT:  tb = TRACK_BIT_RIGHT; break;
       
  2113 			case TRACK_BIT_RIGHT: tb = TRACK_BIT_LEFT;  break;
       
  2114 		}
       
  2115 		return CombineTrackStatus(TrackBitsToTrackdirBits(tb), TRACKDIR_BIT_NONE);
       
  2116 	}
       
  2117 
  2101 	if (mode != TRANSPORT_RAIL) return 0;
  2118 	if (mode != TRANSPORT_RAIL) return 0;
  2102 
  2119 
  2103 	TrackBits trackbits = TRACK_BIT_NONE;
  2120 	TrackBits trackbits = TRACK_BIT_NONE;
  2104 	TrackdirBits red_signals = TRACKDIR_BIT_NONE;
  2121 	TrackdirBits red_signals = TRACKDIR_BIT_NONE;
  2105 
  2122