File diff r26469:d443093474bb → r26470:40beb4ba4113
src/train_cmd.cpp
Show inline comments
 
@@ -2538,12 +2538,13 @@ public:
 
/* choose a track */
 
static Track ChooseTrainTrack(Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool force_res, bool *got_reservation, bool mark_stuck)
 
{
 
	Track best_track = INVALID_TRACK;
 
	bool do_track_reservation = _settings_game.pf.reserve_paths || force_res;
 
	bool changed_signal = false;
 
	TileIndex final_dest = INVALID_TILE;
 

	
 
	assert((tracks & ~TRACK_BIT_MASK) == 0);
 

	
 
	if (got_reservation != nullptr) *got_reservation = false;
 

	
 
	/* Don't use tracks here as the setting to forbid 90 deg turns might have been switched between reservation and now. */
 
@@ -2610,13 +2611,13 @@ static Track ChooseTrainTrack(Train *v, 
 

	
 
	if (res_dest.tile != INVALID_TILE && !res_dest.okay) {
 
		/* Pathfinders are able to tell that route was only 'guessed'. */
 
		bool      path_found = true;
 
		TileIndex new_tile = res_dest.tile;
 

	
 
		Track next_track = DoTrainPathfind(v, new_tile, dest_enterdir, tracks, path_found, do_track_reservation, &res_dest, nullptr);
 
		Track next_track = DoTrainPathfind(v, new_tile, dest_enterdir, tracks, path_found, do_track_reservation, &res_dest, &final_dest);
 
		if (new_tile == tile) best_track = next_track;
 
		v->HandlePathfindingResult(path_found);
 
	}
 

	
 
	/* No track reservation requested -> finished. */
 
	if (!do_track_reservation) return best_track;
 
@@ -2684,12 +2685,21 @@ static Track ChooseTrainTrack(Train *v, 
 
	}
 

	
 
	TryReserveRailTrack(v->tile, TrackdirToTrack(v->GetVehicleTrackdir()));
 

	
 
	if (changed_signal) MarkTileDirtyByTile(tile);
 

	
 
	orders.Restore();
 
	if (v->current_order.IsType(OT_GOTO_DEPOT) &&
 
			(v->current_order.GetDepotActionType() & ODATFB_NEAREST_DEPOT) &&
 
			final_dest != INVALID_TILE && IsRailDepotTile(final_dest)) {
 
		v->current_order.SetDestination(GetDepotIndex(final_dest));
 
		v->dest_tile = final_dest;
 
		SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP);
 
	}
 

	
 
	return best_track;
 
}
 

	
 
/**
 
 * Try to reserve a path to a safe position.
 
 *