summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/industry.h2
-rw-r--r--src/industry_cmd.cpp20
2 files changed, 17 insertions, 5 deletions
diff --git a/src/industry.h b/src/industry.h
index c6ca6aa5c..ccec91788 100644
--- a/src/industry.h
+++ b/src/industry.h
@@ -65,6 +65,8 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> {
Industry(TileIndex tile = INVALID_TILE) : location(tile, 0, 0) {}
~Industry();
+ void RecomputeProductionMultipliers();
+
/**
* Get the industry of the given tile
* @param tile the tile to get the industry from
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)) {