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(); } }
void SpeciesManager::UpdatePopulationCounter() { // ships of each species and design m_species_object_populations.clear(); for (const auto& entry : Objects().ExistingObjects()) { auto obj = entry.second; if (obj->ObjectType() != OBJ_PLANET && obj->ObjectType() != OBJ_POP_CENTER) continue; auto pop_center = std::dynamic_pointer_cast<PopCenter>(obj); if (!pop_center) continue; const std::string& species = pop_center->SpeciesName(); if (species.empty()) continue; try { m_species_object_populations[species][obj->ID()] += obj->CurrentMeterValue(METER_POPULATION); } catch (...) { continue; } } }
float Ship::Speed() const { return CurrentMeterValue(METER_SPEED); }