void PopCenter::PopCenterPopGrowthProductionResearchPhase() { double cur_pop = CurrentMeterValue(METER_POPULATION); double pop_growth = NextTurnPopGrowth(); // may be negative double new_pop = cur_pop + pop_growth; Logger().debugStream() << "Planet Pop: " << cur_pop << " growth: " << pop_growth; if (new_pop >= MINIMUM_POP_CENTER_POPULATION) { GetMeter(METER_POPULATION)->SetCurrent(new_pop); } else { // if population falls below threshold, kill off the remainder Reset(); } }
float PopCenter::PopCenterNextTurnMeterValue(MeterType meter_type) const { const Meter* meter = GetMeter(meter_type); if (!meter) { throw std::invalid_argument("PopCenter::PopCenterNextTurnMeterValue passed meter type that the PopCenter does not have."); } else if (meter_type == METER_POPULATION) { return meter->Current() + NextTurnPopGrowth(); } else if (meter_type == METER_TARGET_POPULATION) { Logger().debugStream() << "PopCenter::PopCenterNextTurnMeterValue passed valid but unusual (TARGET) meter_type. Returning meter->Current()"; return meter->Current(); } else { Logger().errorStream() << "PopCenter::PopCenterNextTurnMeterValue dealing with invalid meter type"; return 0.0f; } }