本文整理汇总了C++中GetMeter函数的典型用法代码示例。如果您正苦于以下问题:C++ GetMeter函数的具体用法?C++ GetMeter怎么用?C++ GetMeter使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetMeter函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ResourceCenterPopGrowthProductionResearchPhase
void Planet::PopGrowthProductionResearchPhase() {
UniverseObject::PopGrowthProductionResearchPhase();
// do not do production if planet was just conquered
if (m_just_conquered)
m_just_conquered = false;
else
ResourceCenterPopGrowthProductionResearchPhase();
PopCenterPopGrowthProductionResearchPhase();
// check for planets with zero population. If they have a species set, then
// they probably just starved
if (!SpeciesName().empty() && GetMeter(METER_POPULATION)->Current() == 0.0) {
// generate starvation sitrep for empire that owns this depopulated planet
if (Empire* empire = Empires().Lookup(this->Owner()))
empire->AddSitRepEntry(CreatePlanetStarvedToDeathSitRep(this->ID()));
// remove species
SetSpecies("");
}
GetMeter(METER_SHIELD)->SetCurrent(Planet::NextTurnCurrentMeterValue(METER_SHIELD));
GetMeter(METER_DEFENSE)->SetCurrent(Planet::NextTurnCurrentMeterValue(METER_DEFENSE));
GetMeter(METER_TROOPS)->SetCurrent(Planet::NextTurnCurrentMeterValue(METER_TROOPS));
GetMeter(METER_REBEL_TROOPS)->SetCurrent(Planet::NextTurnCurrentMeterValue(METER_REBEL_TROOPS));
StateChangedSignal();
}
示例2: ResourceCenterPopGrowthProductionResearchPhase
void Planet::PopGrowthProductionResearchPhase() {
UniverseObject::PopGrowthProductionResearchPhase();
// do not do production if planet was just conquered
if (m_just_conquered)
m_just_conquered = false;
else
ResourceCenterPopGrowthProductionResearchPhase();
PopCenterPopGrowthProductionResearchPhase();
// check for planets with zero population. If they have any owners
// then the planet has likely just starved. Regardless, resetting the
// planet keeps things consistent.
if (GetMeter(METER_POPULATION)->Current() == 0.0 && !Unowned()) {
// generate starvation sitrep for empire that owns this depopulated planet
if (Empire* empire = Empires().Lookup(this->Owner()))
empire->AddSitRepEntry(CreatePlanetStarvedToDeathSitRep(this->ID()));
// reset planet to empty and unowned
Reset();
} else {
GetMeter(METER_SHIELD)->SetCurrent(Planet::NextTurnCurrentMeterValue(METER_SHIELD));
GetMeter(METER_DEFENSE)->SetCurrent(Planet::NextTurnCurrentMeterValue(METER_SHIELD));
GetMeter(METER_TROOPS)->SetCurrent(Planet::NextTurnCurrentMeterValue(METER_SHIELD));
}
StateChangedSignal();
}
示例3: if
void Steps::TidyUpData()
{
// Don't set the StepsType to dance single if it's invalid. That just
// causes unrecognized charts to end up where they don't belong.
// Leave it as StepsType_Invalid so the Song can handle it specially. This
// is a forwards compatibility feature, so that if a future version adds a
// new style, editing a simfile with unrecognized Steps won't silently
// delete them. -Kyz
if( m_StepsType == StepsType_Invalid )
{
LOG->Warn("Detected steps with unknown style '%s' in '%s'", m_StepsTypeStr.c_str(), m_pSong->m_sSongFileName.c_str());
}
else if(m_StepsTypeStr == "")
{
m_StepsTypeStr= GAMEMAN->GetStepsTypeInfo(m_StepsType).szName;
}
if( GetDifficulty() == Difficulty_Invalid )
SetDifficulty( StringToDifficulty(GetDescription()) );
if( GetDifficulty() == Difficulty_Invalid )
{
if( GetMeter() == 1 ) SetDifficulty( Difficulty_Beginner );
else if( GetMeter() <= 3 ) SetDifficulty( Difficulty_Easy );
else if( GetMeter() <= 6 ) SetDifficulty( Difficulty_Medium );
else SetDifficulty( Difficulty_Hard );
}
if( GetMeter() < 1) // meter is invalid
SetMeter( int(PredictMeter()) );
}
示例4: GetMeter
void Planet::Depopulate() {
PopCenter::Depopulate();
GetMeter(METER_INDUSTRY)->Reset();
GetMeter(METER_RESEARCH)->Reset();
GetMeter(METER_TRADE)->Reset();
GetMeter(METER_CONSTRUCTION)->Reset();
ClearFocus();
}
示例5: switch
double Planet::NextTurnCurrentMeterValue(MeterType type) const
{
MeterType max_meter_type = INVALID_METER_TYPE;
switch (type) {
case METER_TARGET_POPULATION:
case METER_TARGET_HEALTH:
case METER_POPULATION:
case METER_HEALTH:
case METER_FOOD_CONSUMPTION:
return PopCenterNextTurnMeterValue(type);
break;
case METER_TARGET_FARMING:
case METER_TARGET_INDUSTRY:
case METER_TARGET_RESEARCH:
case METER_TARGET_TRADE:
case METER_TARGET_MINING:
case METER_TARGET_CONSTRUCTION:
case METER_FARMING:
case METER_INDUSTRY:
case METER_RESEARCH:
case METER_TRADE:
case METER_MINING:
case METER_CONSTRUCTION:
return ResourceCenterNextTurnMeterValue(type);
break;
case METER_SHIELD: max_meter_type = METER_MAX_SHIELD; break;
case METER_TROOPS: max_meter_type = METER_MAX_TROOPS; break;
case METER_DEFENSE: max_meter_type = METER_MAX_DEFENSE; break;
break;
default:
return UniverseObject::NextTurnCurrentMeterValue(type);
}
const Meter* meter = GetMeter(type);
if (!meter) {
throw std::invalid_argument("Planet::NextTurnCurrentMeterValue passed meter type that the Planet does not have, but should.");
}
double current_meter_value = meter->Current();
const Meter* max_meter = GetMeter(max_meter_type);
if (!max_meter) {
throw std::runtime_error("Planet::NextTurnCurrentMeterValue dealing with invalid meter type");
}
double max_meter_value = max_meter->Current();
// being attacked prevents meter growth
if (LastTurnAttackedByShip() >= CurrentTurn()) {
return std::min(current_meter_value, max_meter_value);
}
// currently meter growth is one per turn.
return std::min(current_meter_value + 1.0, max_meter_value);
}
示例6: GetMeter
void Planet::Reset() {
PopCenter::Reset();
ResourceCenter::Reset();
GetMeter(METER_SUPPLY)->Reset();
GetMeter(METER_MAX_SUPPLY)->Reset();
GetMeter(METER_SHIELD)->Reset();
GetMeter(METER_MAX_SHIELD)->Reset();
GetMeter(METER_DEFENSE)->Reset();
GetMeter(METER_MAX_DEFENSE)->Reset();
GetMeter(METER_DETECTION)->Reset();
GetMeter(METER_REBEL_TROOPS)->Reset();
if (m_is_about_to_be_colonized && !OwnedBy(ALL_EMPIRES)) {
for (std::set<int>::const_iterator it = m_buildings.begin(); it != m_buildings.end(); ++it)
if (TemporaryPtr<Building> building = GetBuilding(*it))
building->Reset();
}
m_just_conquered = false;
m_is_about_to_be_colonized = false;
m_is_about_to_be_invaded = false;
m_is_about_to_be_bombarded = false;
SetOwner(ALL_EMPIRES);
}
示例7: GetMeter
float PopCenter::NextTurnPopGrowth() const {
float target_pop = GetMeter(METER_TARGET_POPULATION)->Current();
float cur_pop = GetMeter(METER_POPULATION)->Current();
float pop_change = 0.0f;
if (target_pop > cur_pop) {
pop_change = cur_pop * (target_pop + 1 - cur_pop) / 100; // Using target population slightly above actual population avoids excessively slow asymptotic growth towards target.
pop_change = std::min(pop_change, target_pop - cur_pop);
} else {
pop_change = -(cur_pop - target_pop) / 10;
pop_change = std::max(pop_change, target_pop - cur_pop);
}
return pop_change;
}
示例8: switch
float Planet::NextTurnCurrentMeterValue(MeterType type) const {
MeterType max_meter_type = INVALID_METER_TYPE;
switch (type) {
case METER_TARGET_POPULATION:
case METER_POPULATION:
case METER_TARGET_HAPPINESS:
case METER_HAPPINESS:
return PopCenterNextTurnMeterValue(type);
break;
case METER_TARGET_INDUSTRY:
case METER_TARGET_RESEARCH:
case METER_TARGET_TRADE:
case METER_TARGET_CONSTRUCTION:
case METER_INDUSTRY:
case METER_RESEARCH:
case METER_TRADE:
case METER_CONSTRUCTION:
return ResourceCenterNextTurnMeterValue(type);
break;
case METER_SHIELD: max_meter_type = METER_MAX_SHIELD; break;
case METER_TROOPS: max_meter_type = METER_MAX_TROOPS; break;
case METER_DEFENSE: max_meter_type = METER_MAX_DEFENSE; break;
case METER_SUPPLY: max_meter_type = METER_MAX_SUPPLY; break;
break;
default:
return UniverseObject::NextTurnCurrentMeterValue(type);
}
const Meter* meter = GetMeter(type);
if (!meter) {
throw std::invalid_argument("Planet::NextTurnCurrentMeterValue passed meter type that the Planet does not have, but should: " + boost::lexical_cast<std::string>(type));
}
float current_meter_value = meter->Current();
const Meter* max_meter = GetMeter(max_meter_type);
if (!max_meter) {
throw std::runtime_error("Planet::NextTurnCurrentMeterValue dealing with invalid meter type: " + boost::lexical_cast<std::string>(type));
}
float max_meter_value = max_meter->Current();
// being attacked prevents meter growth
if (LastTurnAttackedByShip() >= CurrentTurn())
return std::min(current_meter_value, max_meter_value);
// currently meter growth is one per turn.
return std::min(current_meter_value + 1.0f, max_meter_value);
}
示例9: SetOwner
void Planet::Reset() {
// remove owner
SetOwner(ALL_EMPIRES);
// reset popcenter meters
PopCenter::Reset();
// reset resourcecenter meters
ResourceCenter::Reset();
// reset planet meters
GetMeter(METER_SUPPLY)->Reset();
GetMeter(METER_SHIELD)->Reset();
GetMeter(METER_MAX_SHIELD)->Reset();
GetMeter(METER_DEFENSE)->Reset();
GetMeter(METER_MAX_DEFENSE)->Reset();
GetMeter(METER_DETECTION)->Reset();
GetMeter(METER_REBEL_TROOPS)->Reset();
// reset buildings
for (std::set<int>::const_iterator it = m_buildings.begin(); it != m_buildings.end(); ++it)
if (Building* building = GetBuilding(*it))
building->Reset();
// reset other state
m_available_trade = 0.0;
m_just_conquered = false;
m_is_about_to_be_colonized = false;
m_is_about_to_be_invaded = false;
}
示例10: GetMeter
double PopCenter::NextTurnPopGrowth() const {
double target_pop = std::max(GetMeter(METER_TARGET_POPULATION)->Current(), 0.01); // clamping target pop to at least 1 prevents divide by zero cases
double cur_pop = GetMeter(METER_POPULATION)->Current();
Logger().debugStream() << "pop: " << cur_pop << " / " << target_pop;
double population_fraction = (target_pop - cur_pop) / target_pop;
Logger().debugStream() << "pop frac: " << population_fraction;
double change_potential = cur_pop * population_fraction * 0.05;
Logger().debugStream() << "change potential: " << change_potential;
double max_growth = target_pop - cur_pop;
double max_loss = -cur_pop;
double change = 0.0;
if (change_potential > 0)
change = std::min(max_growth, change_potential);
else if (change_potential < 0)
change = std::max(max_loss, change_potential);
Logger().debugStream() << "pop change: " << change;
return change;
}
示例11: GetMeter
bool Field::InField(double x, double y) const {
const Meter* size_meter = GetMeter(METER_SIZE);
double radius = 1.0;
if (size_meter)
radius = size_meter->Current();
double dist2 = (x - this->X())*(x - this->X()) + (y - this->Y())*(y - this->Y());
return dist2 < radius*radius;
}
示例12: GetMeter
void ResourceCenter::ResourceCenterClampMeters() {
GetMeter(METER_TARGET_INDUSTRY)->ClampCurrentToRange();
GetMeter(METER_TARGET_RESEARCH)->ClampCurrentToRange();
GetMeter(METER_TARGET_TRADE)->ClampCurrentToRange();
GetMeter(METER_TARGET_CONSTRUCTION)->ClampCurrentToRange();
GetMeter(METER_INDUSTRY)->ClampCurrentToRange();
GetMeter(METER_RESEARCH)->ClampCurrentToRange();
GetMeter(METER_TRADE)->ClampCurrentToRange();
GetMeter(METER_CONSTRUCTION)->ClampCurrentToRange();
}
示例13: SetDifficulty
void Steps::TidyUpData()
{
if( m_StepsType == StepsType_Invalid )
m_StepsType = StepsType_dance_single;
if( GetDifficulty() == Difficulty_Invalid )
SetDifficulty( StringToDifficulty(GetDescription()) );
if( GetDifficulty() == Difficulty_Invalid )
{
if( GetMeter() == 1 ) SetDifficulty( Difficulty_Beginner );
else if( GetMeter() <= 3 ) SetDifficulty( Difficulty_Easy );
else if( GetMeter() <= 6 ) SetDifficulty( Difficulty_Medium );
else SetDifficulty( Difficulty_Hard );
}
if( GetMeter() < 1) // meter is invalid
SetMeter( int(PredictMeter()) );
}
示例14: ResetTargetMaxUnpairedMeters
void System::ResetTargetMaxUnpairedMeters() {
UniverseObject::ResetTargetMaxUnpairedMeters();
// give systems base stealth slightly above zero, so that they can't be
// seen from a distance without high detection ability
if (Meter* stealth = GetMeter(METER_STEALTH)) {
stealth->ResetCurrent();
stealth->AddToCurrent(0.01f);
}
}
示例15: GetMeter
void ResourceCenter::Reset() {
m_focus.clear();
GetMeter(METER_INDUSTRY)->Reset();
GetMeter(METER_RESEARCH)->Reset();
GetMeter(METER_TRADE)->Reset();
GetMeter(METER_CONSTRUCTION)->Reset();
GetMeter(METER_TARGET_INDUSTRY)->Reset();
GetMeter(METER_TARGET_RESEARCH)->Reset();
GetMeter(METER_TARGET_TRADE)->Reset();
GetMeter(METER_TARGET_CONSTRUCTION)->Reset();
}