Fix: AirportGetNearestTown incorrectly assumed first TileIterator result was origin. #11565
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation / Problem
AirportGetNearestTown uses the first result of TileIterator and assumes it is the origin tile. However not all TileIterators are equal, and some do not start at the top-corner, so the perimeter check was wrong.
AirportTileTableIterator iterates the tiles in the airport spec, which is made up from a list of offsets. These can start anywhere within the layout.
As the perimeter is used to limit the range of tiles that are checked, if it is wrong then some tiles will be missed, which can result in the wrong town being returned. This then leads on to station noise level being applied/removed from the wrong town.
Description
As the caller already has the origin tile, pass that and use it to determine the perimeter instead.
This issue was found by asserting that TileX(cur_tile) and TileY(cur_tile) were within the perimeter bounds.
Limitations
Checklist for review
Some things are not automated, and forgotten often. This list is a reminder for the reviewers.