本文整理汇总了C++中CSystem::HasStore方法的典型用法代码示例。如果您正苦于以下问题:C++ CSystem::HasStore方法的具体用法?C++ CSystem::HasStore怎么用?C++ CSystem::HasStore使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CSystem
的用法示例。
在下文中一共展示了CSystem::HasStore方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DecrementDueToFullStore
//removes workers from a cathegory which has a store until production + store <= store,
//so that nothing will be wasted on next turn change
int DecrementDueToFullStore(WORKER::Typ type)
{
int unset = 0;
if(!m_pSystem->HasStore(type))
return unset;
const int store = m_pSystem->GetResourceStore(type);
while(true)
{
const int workers = m_pSystem->GetWorker(type);
if(workers == 0)
break;
m_pSystem->CalculateVariables();
const int prod = m_pSystem->GetProduction()->GetXProd(type);
if(store + prod <= m_pSystem->GetXStoreMax(type))
break;
SetWorker(type, CSystem::SET_WORKER_MODE_DECREMENT);
++unset;
}
return unset;
}
示例2: CheckEnergyConsumers
bool CSystemManager::CheckEnergyConsumers(CSystem& system)
{
if(!m_bOnOffline)
return false;
CEnergyConsumersChecker checker(system);
CArray<CBuilding>* buildings = system.GetAllBuildings();
bool bomb_warning = false;
bool defense_checked = false;
const CSystemProd& prod = *system.GetProduction();
int additional_available_energy = prod.GetAvailableEnergy();
for(int i = 0; i < buildings->GetSize(); ++i)
{
CBuilding& building = buildings->GetAt(i);
const CBuildingInfo& info = resources::BuildingInfo->GetAt(building.GetRunningNumber() - 1);
const int needed = info.GetNeededEnergy();
if(needed == 0)
continue;
if(m_IgnoredBuildings.find(info.GetRunningNumber()) != m_IgnoredBuildings.end())
continue;
bool should_be_online = building.GetIsBuildingOnline();
if(info.GetShipYard() || info.GetShipBuildSpeed() > 0)
{
AssertBotE(!info.IsDefenseBuilding());
should_be_online = checker.ShouldTakeShipyardOnline();
}
if(info.IsDefenseBuilding())
{
AssertBotE(!info.GetShipYard());
if(bomb_warning)
should_be_online = true;
else if(!defense_checked)
{
bomb_warning = checker.BomberInSector();
should_be_online = bomb_warning;
defense_checked = true;
}
else
should_be_online = false;
}
if(info.IsDeritiumRefinery())
should_be_online = checker.CheckStoreFull(RESOURCES::DERITIUM, info, building);
if(info.GetResistance() > 0)
should_be_online = !system.Taken();
if(info.GetShipTraining() > 0)
should_be_online = system.GetOwnerOfShip(system.OwnerID(), true);
if(info.GetTroopTraining() > 0)
should_be_online = !system.GetTroops()->IsEmpty();
bool minus_moral = false;
if(info.GetMoralProd() < 0)
minus_moral = should_be_online = checker.CheckMoral(info, building, m_iMinMoral, m_iMinMoralProd);
const WORKER::Typ type = info.ProducesWorkerfull();
if(type != WORKER::NONE)
{
should_be_online = system.HasStore(type) ?
checker.CheckStoreFull(WorkerToResource(type), info, building) : true;
}
should_be_online = should_be_online || info.IsUsefulForProduction();
should_be_online = should_be_online &&
(info.OnlyImprovesProduction(minus_moral) ||
(info.GetShipBuildSpeed() > 0 && checker.ShouldTakeShipyardOnline()));
should_be_online = should_be_online || info.IsUsefulMoral();
const bool is_online = building.GetIsBuildingOnline();
if(should_be_online && !is_online)
{
if(additional_available_energy >= needed)
{
building.SetIsBuildingOnline(true);
additional_available_energy -= needed;
system.CalculateVariables();
}
}
else if (!should_be_online && is_online)
{
const int needed = info.GetNeededEnergy();
building.SetIsBuildingOnline(false);
additional_available_energy += needed;
system.CalculateVariables();
}
}
AssertBotE(additional_available_energy >= 0);
return m_bBombWarning && bomb_warning;
}