(svn r20896) -Codechange: Split recompution of productionrates for non-smooth economy to separate function.

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
frosch 14 years ago
parent a0a51c2ac1
commit 7f060bdaf5

@ -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

@ -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)) {

Loading…
Cancel
Save