Fix: Incorrect display of industry production around tiles. (#7426)

Display of industry production around tiles (as shown when placing a station)
did not take account of the station catchment changes, so still showed production
from an industry even if it was not covered by a tile.

This is fixed by making a set of nearby industries that are covered, instead of
looping over all possible industries.
This commit is contained in:
PeterN
2019-03-27 23:10:02 +00:00
committed by GitHub
parent 66dd7c3879
commit 7fb77ff35a
2 changed files with 11 additions and 11 deletions

View File

@@ -512,21 +512,21 @@ CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad)
assert(w > 0);
assert(h > 0);
std::set<IndustryID> industries;
TileArea ta(TileXY(x1, y1), TileXY(x2 - 1, y2 - 1));
/* Loop over all tiles to get the produced cargo of
* everything except industries */
TILE_AREA_LOOP(tile, ta) AddProducedCargo(tile, produced);
TILE_AREA_LOOP(tile, ta) {
if (IsTileType(tile, MP_INDUSTRY)) industries.insert(GetIndustryIndex(tile));
AddProducedCargo(tile, produced);
}
/* Loop over the industries. They produce cargo for
* anything that is within 'rad' from their bounding
* box. As such if you have e.g. a oil well the tile
* area loop might not hit an industry tile while
* the industry would produce cargo for the station.
/* Loop over the seen industries. They produce cargo for
* anything that is within 'rad' of any one of their tiles.
*/
const Industry *i;
FOR_ALL_INDUSTRIES(i) {
if (!ta.Intersects(i->location)) continue;
for (IndustryID industry : industries) {
const Industry *i = Industry::Get(industry);
/* Skip industry with neutral station */
if (i->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) continue;