Mercurial > hg > openttd
changeset 16042:51a3880d61ec draft
(svn r20735) -Codechange: Introduce GetIndustryGamePlayProbability().
author | alberth <alberth@openttd.org> |
---|---|
date | Sat, 04 Sep 2010 11:29:42 +0000 |
parents | aae197147c05 |
children | 484dbd3d5cef |
files | src/industry_cmd.cpp |
diffstat | 1 files changed, 21 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1863,6 +1863,24 @@ } } +/** + * Compute the probability for constructing a new industry during game play. + * @param it Industry type to compute. + * @return Relative probability for the industry to appear. + */ +static uint16 GetIndustryGamePlayProbability(IndustryType it) +{ + const IndustrySpec *ind_spc = GetIndustrySpec(it); + byte chance = ind_spc->appear_ingame[_settings_game.game_creation.landscape]; + if (!ind_spc->enabled || chance == 0 || ind_spc->num_table == 0 || + ((ind_spc->behaviour & INDUSTRYBEH_BEFORE_1950) && _cur_year > 1950) || + ((ind_spc->behaviour & INDUSTRYBEH_AFTER_1960) && _cur_year < 1960) || + !CheckIfCallBackAllowsAvailability(it, IACT_RANDOMCREATION)) { + return 0; + } + return chance; +} + /** Number of industries on a 256x256 map */ static const byte _numof_industry_table[] = { 0, // none @@ -1983,16 +2001,9 @@ uint16 probability_max = 0; /* Generate a list of all possible industries that can be built. */ - const IndustrySpec *ind_spc; for (IndustryType j = 0; j < NUM_INDUSTRYTYPES; j++) { - ind_spc = GetIndustrySpec(j); - byte chance = ind_spc->appear_ingame[_settings_game.game_creation.landscape]; - - if (!ind_spc->enabled || chance == 0 || ind_spc->num_table == 0) continue; - - /* If there is no Callback CBID_INDUSTRY_AVAILABLE or if this one did not fail, - * and if appearing chance for this landscape is above 0, this industry can be chosen */ - if (CheckIfCallBackAllowsAvailability(j, IACT_RANDOMCREATION)) { + uint16 chance = GetIndustryGamePlayProbability(j); + if (chance > 0) { probability_max += chance; /* adds the result for this industry */ cumulative_probs[num].ind = j; @@ -2011,11 +2022,6 @@ if (cumulative_probs[j].prob >= rndtype) break; } - ind_spc = GetIndustrySpec(cumulative_probs[j].ind); - /* Check if it is allowed */ - if ((ind_spc->behaviour & INDUSTRYBEH_BEFORE_1950) && _cur_year > 1950) return; - if ((ind_spc->behaviour & INDUSTRYBEH_AFTER_1960) && _cur_year < 1960) return; - /* try to create 2000 times this industry */ Industry *ind; // Will receive the industry's creation pointer. num = 2000; @@ -2025,6 +2031,7 @@ if (--num == 0) return; } + const IndustrySpec *ind_spc = GetIndustrySpec(cumulative_probs[j].ind); SetDParam(0, ind_spc->name); if (ind_spc->new_industry_text > STR_LAST_STRINGID) { SetDParam(1, STR_TOWN_NAME);