diff options
author | alberth <alberth@openttd.org> | 2010-09-04 11:59:12 +0000 |
---|---|---|
committer | alberth <alberth@openttd.org> | 2010-09-04 11:59:12 +0000 |
commit | fcf92a20e22f22bead39caa6aff54a56db584fd3 (patch) | |
tree | f063164e09a036b88c1601aec522893227cc34bd /src | |
parent | 6c34a044c818cb88cb0dd2bf373980e8e4c6c274 (diff) | |
download | openttd-fcf92a20e22f22bead39caa6aff54a56db584fd3.tar.xz |
(svn r20736) -Codechange: Introduce a new function for trying to create a new industry.
Diffstat (limited to 'src')
-rw-r--r-- | src/industry_cmd.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index f4485e88b..dccf4b2a1 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1891,6 +1891,24 @@ static const byte _numof_industry_table[] = { }; /** + * Try to place the industry in the game. + * Since there is no feedback why placement fails, there is no other option + * than to try a few times before concluding it does not work. + * @param type Industry type of the desired industry. + * @param try_hard Try very hard to find a place. (Used to place at least one industry per type.) + * @return Pointer to created industry, or \c NULL if creation failed. + */ +static Industry *PlaceIndustry(IndustryType type, bool try_hard) +{ + uint tries = try_hard ? 10000u : 2000u; + for (; tries > 0; tries--) { + Industry *ind = CreateNewIndustry(RandomTile(), type); + if (ind != NULL) return ind; + } + return NULL; +} + +/** * Try to build a industry on the map. * @param type IndustryType of the desired industry * @param try_hard Try very hard to find a place. (Used to place at least one industry per type) @@ -1900,10 +1918,7 @@ static void PlaceInitialIndustry(IndustryType type, bool try_hard) Backup<CompanyByte> cur_company(_current_company, OWNER_NONE, FILE_LINE); IncreaseGeneratingWorldProgress(GWP_INDUSTRY); - - for (uint i = 0; i < (try_hard ? 10000u : 2000u); i++) { - if (CreateNewIndustry(RandomTile(), type) != NULL) break; - } + PlaceIndustry(type, try_hard); cur_company.Restore(); } @@ -2023,13 +2038,8 @@ static void MaybeNewIndustry() } /* try to create 2000 times this industry */ - Industry *ind; // Will receive the industry's creation pointer. - num = 2000; - for (;;) { - ind = CreateNewIndustry(RandomTile(), cumulative_probs[j].ind); - if (ind != NULL) break; - if (--num == 0) return; - } + Industry *ind = PlaceIndustry(cumulative_probs[j].ind, false); + if (ind == NULL) return; const IndustrySpec *ind_spc = GetIndustrySpec(cumulative_probs[j].ind); SetDParam(0, ind_spc->name); |