diff options
author | rubidium <rubidium@openttd.org> | 2010-01-04 21:10:20 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2010-01-04 21:10:20 +0000 |
commit | 28fc7b47bd35acc860e84e3885d13ffb0fad2c83 (patch) | |
tree | c461b7b47abb73891c5caf5d490cede32158ed0d /src/ai | |
parent | 1ed599f5cf6a0dec14d91d5442a08560e254d35c (diff) | |
download | openttd-28fc7b47bd35acc860e84e3885d13ffb0fad2c83.tar.xz |
(svn r18726) -Fix [FS#3463]: with non-uniform industries the 'supplies' text when building a station could be incorrect (missing a cargo)
-Change [NoAI]: AITile::GetCargoProduction now returns the number of producers and not the number of tiles of producers.
-Fix [NoAI]: AITileList_IndustryProducing would omit some tiles for at which a station would get cargo.
Diffstat (limited to 'src/ai')
-rw-r--r-- | src/ai/api/ai_changelog.hpp | 6 | ||||
-rw-r--r-- | src/ai/api/ai_tile.hpp | 8 | ||||
-rw-r--r-- | src/ai/api/ai_tilelist.cpp | 21 |
3 files changed, 13 insertions, 22 deletions
diff --git a/src/ai/api/ai_changelog.hpp b/src/ai/api/ai_changelog.hpp index 23b9d1573..7abe9023f 100644 --- a/src/ai/api/ai_changelog.hpp +++ b/src/ai/api/ai_changelog.hpp @@ -91,6 +91,12 @@ * vehicle of that type in your company, regardless if it's still buildable * or not. AIEngine::IsBuildable returns only true when you can actually * build an engine. + * \li AITile::GetCargoProduction will now return the number of producers, + * including houses instead the number of producing tiles. This means that + * also industries that do not have a tile within the radius, but where + * the search bounding box and the industry's bounding box intersect, are + * counted. Previously these industries (and their cargos), although they + * produced cargo for a station at the given location, were not returned. * * \b 0.7.5 * diff --git a/src/ai/api/ai_tile.hpp b/src/ai/api/ai_tile.hpp index 6b254899f..9ba0df031 100644 --- a/src/ai/api/ai_tile.hpp +++ b/src/ai/api/ai_tile.hpp @@ -309,9 +309,8 @@ public: static int32 GetCargoAcceptance(TileIndex tile, CargoID cargo_type, int width, int height, int radius); /** - * Checks how many tiles in the radius produces this cargo. - * It creates a radius around the tile, and adds up all tiles that produce - * this cargo. + * Checks how many producers in the radius produces this cargo. + * It creates a radius around the tile, and counts all producer of this cargo. * @param tile The tile to check on. * @param cargo_type The cargo to check the production of. * @param width The width of the station. @@ -321,8 +320,7 @@ public: * @pre width > 0. * @pre height > 0. * @pre radius >= 0. - * @return The tiles that produce this cargo within radius of the tile. - * @note Town(houses) are not included in the value. + * @return The number of producers that produce this cargo within radius of the tile. */ static int32 GetCargoProduction(TileIndex tile, CargoID cargo_type, int width, int height, int radius); diff --git a/src/ai/api/ai_tilelist.cpp b/src/ai/api/ai_tilelist.cpp index 12ebb1ead..8513ba17c 100644 --- a/src/ai/api/ai_tilelist.cpp +++ b/src/ai/api/ai_tilelist.cpp @@ -90,13 +90,11 @@ AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_i const Industry *i = ::Industry::Get(industry_id); /* Check if this industry produces anything */ - { - bool cargo_produces = false; - for (byte j = 0; j < lengthof(i->produced_cargo); j++) { - if (i->produced_cargo[j] != CT_INVALID) cargo_produces = true; - } - if (!cargo_produces) return; + bool cargo_produces = false; + for (byte j = 0; j < lengthof(i->produced_cargo); j++) { + if (i->produced_cargo[j] != CT_INVALID) cargo_produces = true; } + if (!cargo_produces) return; if (!_settings_game.station.modified_catchment) radius = CA_UNMODIFIED; @@ -105,17 +103,6 @@ AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_i /* Exclude all tiles that belong to this industry */ if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue; - /* Only add the tile if it produces the cargo (a bug in OpenTTD makes this - * inconsitance). */ - CargoArray produced = ::GetProductionAroundTiles(cur_tile, 1, 1, radius); - { - bool cargo_produces = false; - for (byte j = 0; j < lengthof(i->produced_cargo); j++) { - if (i->produced_cargo[j] != CT_INVALID && produced[i->produced_cargo[j]] != 0) cargo_produces = true; - } - if (!cargo_produces) continue; - } - this->AddTile(cur_tile); } } |