diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 034052a507..78f8e09766 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1668,7 +1668,7 @@ static void PopulateStationsNearby(Industry *ind) } /* Get our list of nearby stations. */ - FindStationsAroundTiles(ind->location, &ind->stations_near, false); + FindStationsAroundTiles(ind->location, &ind->stations_near, false, ind->index); /* Test if industry can accept cargo */ uint cargo_index; diff --git a/src/openttd.cpp b/src/openttd.cpp index dc4c6c3b29..95ddce307a 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1389,7 +1389,7 @@ void CheckCaches(bool force_check, std::function log) CCLOG("industry stations_near mismatch: ind %i, (old size: %u, new size: %u)", (int)ind->index, (uint)old_industry_stations_nears[i].size(), (uint)ind->stations_near.size()); } StationList stlist; - FindStationsAroundTiles(ind->location, &stlist, false); + FindStationsAroundTiles(ind->location, &stlist, false, ind->index); if (ind->stations_near != stlist) { CCLOG("industry FindStationsAroundTiles mismatch: ind %i, (recalc size: %u, find size: %u)", (int)ind->index, (uint)ind->stations_near.size(), (uint)stlist.size()); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 8d3b2d4044..2997c4f14e 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4054,7 +4054,7 @@ static void AddNearbyStationsByCatchment(TileIndex tile, StationList *stations, * @param[out] stations The list to store the stations in * @param use_nearby Use nearby station list of industry/town associated with location.tile */ -void FindStationsAroundTiles(const TileArea &location, StationList * const stations, bool use_nearby) +void FindStationsAroundTiles(const TileArea &location, StationList * const stations, bool use_nearby, const IndustryID industry_filter) { if (use_nearby) { /* Industries and towns maintain a list of nearby stations */ @@ -4092,6 +4092,7 @@ void FindStationsAroundTiles(const TileArea &location, StationList * const stati /* Test if the tile is within the station's catchment */ TILE_AREA_LOOP(tile, location) { + if (industry_filter != INVALID_INDUSTRY && (!IsTileType(tile, MP_INDUSTRY) || GetIndustryIndex(tile) != industry_filter)) continue; if (st->TileIsInCatchment(tile)) { stations->insert(st); break; diff --git a/src/station_func.h b/src/station_func.h index ca0db22664..1ca3fd7aef 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -23,7 +23,7 @@ void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius); -void FindStationsAroundTiles(const TileArea &location, StationList *stations, bool use_nearby = true); +void FindStationsAroundTiles(const TileArea &location, StationList *stations, bool use_nearby = true, IndustryID industry_filter = INVALID_INDUSTRY); void ShowStationViewWindow(StationID station); void UpdateAllStationVirtCoords();