src/road_cmd.cpp
changeset 9789 b753e2d50d99
parent 9785 2005c34d0811
child 10017 c0eb11a864d7
equal deleted inserted replaced
9788:8d1bdf1ba220 9789:b753e2d50d99
   342 			if (rt == ROADTYPE_ROAD && HasTileRoadType(tile, ROADTYPE_TRAM) && (flags & DC_EXEC || crossing_check)) return CMD_ERROR;
   342 			if (rt == ROADTYPE_ROAD && HasTileRoadType(tile, ROADTYPE_TRAM) && (flags & DC_EXEC || crossing_check)) return CMD_ERROR;
   343 
   343 
   344 			if (flags & DC_EXEC) {
   344 			if (flags & DC_EXEC) {
   345 				RoadTypes rts = GetRoadTypes(tile) & ComplementRoadTypes(RoadTypeToRoadTypes(rt));
   345 				RoadTypes rts = GetRoadTypes(tile) & ComplementRoadTypes(RoadTypeToRoadTypes(rt));
   346 				if (rts == ROADTYPES_NONE) {
   346 				if (rts == ROADTYPES_NONE) {
   347 					MakeRailNormal(tile, GetTileOwner(tile), GetCrossingRailBits(tile), GetRailType(tile));
   347 					TrackBits tracks = GetCrossingRailBits(tile);
       
   348 					bool reserved = GetCrossingReservation(tile);
       
   349 					MakeRailNormal(tile, GetTileOwner(tile), tracks, GetRailType(tile));
       
   350 					if (reserved) SetTrackReservation(tile, tracks);
   348 				} else {
   351 				} else {
   349 					SetRoadTypes(tile, rts);
   352 					SetRoadTypes(tile, rts);
   350 				}
   353 				}
   351 				MarkTileDirtyByTile(tile);
   354 				MarkTileDirtyByTile(tile);
   352 				YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
   355 				YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
   560 			if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
   563 			if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
   561 
   564 
   562 			if (flags & DC_EXEC) {
   565 			if (flags & DC_EXEC) {
   563 				YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
   566 				YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
   564 				/* Always add road to the roadtypes (can't draw without it) */
   567 				/* Always add road to the roadtypes (can't draw without it) */
       
   568 				bool reserved = HasBit(GetTrackReservation(tile), AxisToTrack(OtherAxis(roaddir)));
   565 				MakeRoadCrossing(tile, _current_player, _current_player, _current_player, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
   569 				MakeRoadCrossing(tile, _current_player, _current_player, _current_player, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
       
   570 				SetCrossingReservation(tile, reserved);
   566 				UpdateLevelCrossing(tile, false);
   571 				UpdateLevelCrossing(tile, false);
   567 				MarkTileDirtyByTile(tile);
   572 				MarkTileDirtyByTile(tile);
   568 			}
   573 			}
   569 			return CommandCost(EXPENSES_CONSTRUCTION, _price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4));
   574 			return CommandCost(EXPENSES_CONSTRUCTION, _price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4));
   570 		}
   575 		}