summaryrefslogtreecommitdiff
path: root/src/industry_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/industry_cmd.cpp')
-rw-r--r--src/industry_cmd.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index da79956f8..8e86295d0 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -2030,6 +2030,20 @@ static void UpdateIndustryStatistics(Industry *i)
}
}
+/**
+ * Recompute #production_rate for current #prod_level.
+ * This function is only valid when not using smooth economy.
+ */
+void Industry::RecomputeProductionMultipliers()
+{
+ const IndustrySpec *indspec = GetIndustrySpec(this->type);
+ assert(!indspec->UsesSmoothEconomy());
+
+ /* Rates are rounded up, so e.g. oilrig always produces some passengers */
+ this->production_rate[0] = min(CeilDiv(indspec->production_rate[0] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF);
+ this->production_rate[1] = min(CeilDiv(indspec->production_rate[1] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF);
+}
+
/** Simple helper that will collect data for the generation of industries */
struct ProbabilityHelper {
uint16 prob; ///< probability
@@ -2371,11 +2385,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
/* Recalculate production_rate
* For non-smooth economy these should always be synchronized with prod_level */
- if (recalculate_multipliers) {
- /* Rates are rounded up, so e.g. oilrig always produces some passengers */
- i->production_rate[0] = min(CeilDiv(indspec->production_rate[0] * i->prod_level, PRODLEVEL_DEFAULT), 0xFF);
- i->production_rate[1] = min(CeilDiv(indspec->production_rate[1] * i->prod_level, PRODLEVEL_DEFAULT), 0xFF);
- }
+ if (recalculate_multipliers) i->RecomputeProductionMultipliers();
/* Close if needed and allowed */
if (closeit && !CheckIndustryCloseDownProtection(i->type)) {