# HG changeset patch # User alberth # Date 2010-11-13 15:19:43 # Node ID 4063bb00c47003cfc4d0f9baee8ebdf83bd17b9d # Parent 9455c82d3bdbf5b7098c0b26c193e4acfb02fdae (svn r21173) -Codechange: Don't recompute target industry counts each time. diff --git a/src/industry.h b/src/industry.h --- 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 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2093,20 +2093,29 @@ void Industry::RecomputeProductionMultip /** * 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;