diff --git a/src/ai/api/ai_industry.cpp b/src/ai/api/ai_industry.cpp --- a/src/ai/api/ai_industry.cpp +++ b/src/ai/api/ai_industry.cpp @@ -124,7 +124,7 @@ Industry *ind = ::Industry::Get(industry_id); StationList stations; - ::FindStationsAroundTiles(ind->xy, ind->width, ind->height, &stations); + ::FindStationsAroundTiles(TileArea(ind->xy, ind->width, ind->height), &stations); return (int32)stations.Length(); } diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2066,7 +2066,7 @@ static int WhoCanServiceIndustry(Industr { /* Find all stations within reach of the industry */ StationList stations; - FindStationsAroundTiles(ind->xy, ind->width, ind->height, &stations); + FindStationsAroundTiles(TileArea(ind->xy, ind->width, ind->height), &stations); if (stations.Length() == 0) return 0; // No stations found at all => nobody services diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2997,19 +2997,17 @@ CommandCost CmdRenameStation(TileIndex t /** * Find all stations around a rectangular producer (industry, house, headquarter, ...) * - * @param tile North tile of producer - * @param w_prod X extent of producer - * @param h_prod Y extent of producer + * @param location The location/area of the producer * @param stations The list to store the stations in */ -void FindStationsAroundTiles(TileIndex tile, int w_prod, int h_prod, StationList *stations) +void FindStationsAroundTiles(const TileArea &location, StationList *stations) { /* area to search = producer plus station catchment radius */ int max_rad = (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED); - for (int dy = -max_rad; dy < h_prod + max_rad; dy++) { - for (int dx = -max_rad; dx < w_prod + max_rad; dx++) { - TileIndex cur_tile = TileAddWrap(tile, dx, dy); + for (int dy = -max_rad; dy < location.h + max_rad; dy++) { + for (int dx = -max_rad; dx < location.w + max_rad; dx++) { + TileIndex cur_tile = TileAddWrap(location.tile, dx, dy); if (cur_tile == INVALID_TILE || !IsTileType(cur_tile, MP_STATION)) continue; Station *st = Station::GetByTile(cur_tile); @@ -3017,7 +3015,7 @@ void FindStationsAroundTiles(TileIndex t if (_settings_game.station.modified_catchment) { int rad = st->GetCatchmentRadius(); - if (dx < -rad || dx >= rad + w_prod || dy < -rad || dy >= rad + h_prod) continue; + if (dx < -rad || dx >= rad + location.w || dy < -rad || dy >= rad + location.h) continue; } /* Insert the station in the set. This will fail if it has @@ -3035,7 +3033,7 @@ void FindStationsAroundTiles(TileIndex t const StationList *StationFinder::GetStations() { if (this->tile != INVALID_TILE) { - FindStationsAroundTiles(this->tile, this->w, this->h, &this->stations); + FindStationsAroundTiles(*this, &this->stations); this->tile = INVALID_TILE; } return &this->stations; diff --git a/src/station_func.h b/src/station_func.h --- a/src/station_func.h +++ b/src/station_func.h @@ -22,7 +22,7 @@ void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius); -void FindStationsAroundTiles(TileIndex tile, int w_prod, int h_prod, StationList *stations); +void FindStationsAroundTiles(const TileArea &location, StationList *stations); void ShowStationViewWindow(StationID station); void UpdateAllStationVirtCoords();