summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2010-11-13 15:19:43 +0000
committeralberth <alberth@openttd.org>2010-11-13 15:19:43 +0000
commita245db636006c506b5e11ac51d0287a15a1c24b2 (patch)
treecfd8ac9d898d0675d050ea3344d1772169711fc4
parenteb4ab0091ac5ba6d8b647d426593803275d9a9ac (diff)
downloadopenttd-a245db636006c506b5e11ac51d0287a15a1c24b2.tar.xz
(svn r21173) -Codechange: Don't recompute target industry counts each time.
-rw-r--r--src/industry.h2
-rw-r--r--src/industry_cmd.cpp17
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;