Fix #7592: Do not cache road vehicle path within 8 tiles of destination with multiple entrances
Ported from jgrpp commit 79d5be7e26
This commit is contained in:

committed by
Niels Martin Hansen

parent
9e632355f1
commit
1a88fb5c91
@@ -251,6 +251,11 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
const Station *GetDestinationStation() const
|
||||
{
|
||||
return m_dest_station != INVALID_STATION ? Station::GetIfValid(m_dest_station) : nullptr;
|
||||
}
|
||||
|
||||
protected:
|
||||
/** to access inherited path finder */
|
||||
Tpf& Yapf()
|
||||
@@ -402,6 +407,22 @@ public:
|
||||
path_cache.td.pop_back();
|
||||
path_cache.tile.pop_back();
|
||||
}
|
||||
|
||||
/* Check if target is a station, and cached path ends within 8 tiles of the dest tile */
|
||||
const Station *st = Yapf().GetDestinationStation();
|
||||
if (st) {
|
||||
const RoadStop *stop = st->GetPrimaryRoadStop(v);
|
||||
if (stop != nullptr && (IsDriveThroughStopTile(stop->xy) || stop->GetNextRoadStop(v) != nullptr)) {
|
||||
/* Destination station has at least 2 usable road stops, or first is a drive-through stop,
|
||||
* trim end of path cache within a number of tiles of road stop tile area */
|
||||
TileArea non_cached_area = v->IsBus() ? st->bus_station : st->truck_station;
|
||||
non_cached_area.Expand(YAPF_ROADVEH_PATH_CACHE_DESTINATION_LIMIT);
|
||||
while (!path_cache.empty() && non_cached_area.Contains(path_cache.tile.back())) {
|
||||
path_cache.td.pop_back();
|
||||
path_cache.tile.pop_back();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return next_trackdir;
|
||||
}
|
||||
|
Reference in New Issue
Block a user