diff options
-rw-r--r-- | src/industry.h | 2 | ||||
-rw-r--r-- | src/industry_cmd.cpp | 17 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/industry.h b/src/industry.h index 39e4c2028..03db0a615 100644 --- a/src/industry.h +++ b/src/industry.h @@ -153,7 +153,7 @@ struct IndustryTypeBuildData { void Reset(); - void GetIndustryTypeData(IndustryType it); + bool GetIndustryTypeData(IndustryType it); }; /** diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 39f642278..5cedd4e3a 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2093,20 +2093,29 @@ void Industry::RecomputeProductionMultipliers() /** * Set the #probability field for the industry type \a it for a running game. * @param it Industry type. + * @return The field has changed value. */ -void IndustryTypeBuildData::GetIndustryTypeData(IndustryType it) +bool IndustryTypeBuildData::GetIndustryTypeData(IndustryType it) { - this->probability = GetIndustryGamePlayProbability(it); + uint32 probability = GetIndustryGamePlayProbability(it); + bool changed = probability != this->probability; + this->probability = probability; + return changed; } /** Decide how many industries of each type are needed. */ void IndustryBuildData::SetupTargetCount() { + bool changed = false; + uint num_planned = 0; // Number of industries planned in the industry build data. for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) { - this->builddata[it].GetIndustryTypeData(it); + changed |= this->builddata[it].GetIndustryTypeData(it); + num_planned += this->builddata[it].target_count; } - uint total_amount = this->wanted_inds >> 16; // Desired total number of industries. + changed |= num_planned != total_amount; + if (!changed) return; // All industries are still the same, no need to re-randomize. + uint32 total_prob = 0; // Sum of probabilities. for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) { this->builddata[it].target_count = 0; |