From 83d99ec11d30cf4784eedeeeb088b4fb35b76555 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 17 Apr 2024 21:38:11 +0100 Subject: [PATCH] Fix #12506: Update station/industry nearby lists in BuildOilRig (#12511) --- src/station_cmd.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index c1c81f893e..62ef3128b3 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4336,6 +4336,19 @@ void BuildOilRig(TileIndex tile) st->rect.BeforeAddTile(tile, StationRect::ADD_FORCE); st->UpdateVirtCoord(); + + /* An industry tile has now been replaced with a station tile, this may change the overlap between station catchments and industry tiles. + * Recalculate the station catchment for all stations currently in the industry's nearby list. + * Clear the industry's station nearby list first because Station::RecomputeCatchment cannot remove nearby industries in this case. */ + if (_settings_game.station.serve_neutral_industries) { + StationList nearby = std::move(st->industry->stations_near); + st->industry->stations_near.clear(); + for (Station *near : nearby) { + near->RecomputeCatchment(true); + UpdateStationAcceptance(near, true); + } + } + st->RecomputeCatchment(); UpdateStationAcceptance(st, false); }