diff options
-rw-r--r-- | src/subsidy.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 0a1af3c66..ff420455d 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -23,6 +23,7 @@ #include "game/game.hpp" #include "command_func.h" #include "string_func.h" +#include "tile_cmd.h" #include "table/strings.h" @@ -328,7 +329,14 @@ bool FindSubsidyTownCargoRoute() const Town *src_town = Town::GetRandom(); if (src_town->cache.population < SUBSIDY_CARGO_MIN_POPULATION) return false; - CargoArray town_cargo_produced = GetProductionAroundTiles(src_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); + /* Calculate the produced cargo of houses around town center. */ + CargoArray town_cargo_produced; + TileArea ta = TileArea(src_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_HOUSE)) { + AddProducedCargo(tile, town_cargo_produced); + } + } /* Passenger subsidies are not handled here. */ town_cargo_produced[CT_PASSENGERS] = 0; @@ -431,7 +439,15 @@ bool FindSubsidyCargoDestination(CargoID cid, SourceType src_type, SourceID src) case ST_TOWN: { /* Select a random town. */ const Town *dst_town = Town::GetRandom(); - CargoArray town_cargo_accepted = GetAcceptanceAroundTiles(dst_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); + + /* Calculate cargo acceptance of houses around town center. */ + CargoArray town_cargo_accepted; + TileArea ta = TileArea(dst_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_HOUSE)) { + AddAcceptedCargo(tile, town_cargo_accepted, nullptr); + } + } /* Check if the town can accept this cargo. */ if (town_cargo_accepted[cid] < 8) return false; |