diff options
author | PeterN <peter@fuzzle.org> | 2019-03-27 23:10:02 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-27 23:10:02 +0000 |
commit | 7fb77ff35a124f2533d4c467e289fbd2ec936fbd (patch) | |
tree | b0e67011079be9ade15b047b3bd3549ca6e090dd | |
parent | 66dd7c3879123bb99b712375b66b577f81d53a96 (diff) | |
download | openttd-7fb77ff35a124f2533d4c467e289fbd2ec936fbd.tar.xz |
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.
-rw-r--r-- | bin/ai/regression/tst_regression/result.txt | 4 | ||||
-rw-r--r-- | src/station_cmd.cpp | 18 |
2 files changed, 11 insertions, 11 deletions
diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index cda888d29..58736c68b 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -8536,7 +8536,6 @@ ERROR: IsEnd() is invalid as Begin() is never called --TileList_IndustryProducing-- Count(): 92 Location ListDump: - 46920 => 1 46919 => 1 46918 => 1 46917 => 1 @@ -8545,7 +8544,6 @@ ERROR: IsEnd() is invalid as Begin() is never called 46914 => 1 46913 => 1 46912 => 1 - 46911 => 1 46664 => 1 46663 => 1 46662 => 1 @@ -8628,6 +8626,8 @@ ERROR: IsEnd() is invalid as Begin() is never called 44353 => 1 44352 => 1 44351 => 1 + 46920 => 0 + 46911 => 0 --TileList_StationType-- Count(): 4 diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 5dfba2d19..7a939cd8b 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -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; |