本文整理汇总了C++中CvCity::hasBonus方法的典型用法代码示例。如果您正苦于以下问题:C++ CvCity::hasBonus方法的具体用法?C++ CvCity::hasBonus怎么用?C++ CvCity::hasBonus使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CvCity
的用法示例。
在下文中一共展示了CvCity::hasBonus方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: operator
bool operator() (const UnitInfo::BaseNode& node) const
{
#ifdef ALTAI_DEBUG
//std::ostream& os = CivLog::getLog(*player_.getCvPlayer())->getStream();
#endif
// includes great people
if (node.cost < 0)
{
// do great people if city can produce the right type of great people points from specialists
return false;
}
for (size_t i = 0, count = node.techTypes.size(); i < count; ++i)
{
// if we don't we have the tech and its depth is deeper than our lookaheadDepth, return false
if (!civHelper_->hasTech(node.techTypes[i]) &&
(lookaheadDepth_ == 0 || pAnalysis_->getTechResearchDepth(node.techTypes[i]) > lookaheadDepth_))
{
return false;
}
}
for (size_t i = 0, count = node.nodes.size(); i < count; ++i)
{
if (!boost::apply_visitor(*this, node.nodes[i]))
{
return false;
}
}
if (node.specialUnitType != NO_SPECIALUNIT)
{
if (!gGlobals.getGame().isSpecialUnitValid(node.specialUnitType))
{
return false;
}
}
// todo - add religion and any other checks
bool passedAreaCheck = node.minAreaSize < 0, passedBonusCheck = ignoreRequiredResources_ || (node.andBonusTypes.empty() && node.orBonusTypes.empty());
bool passedBuildingCheck = node.prereqBuildingType == NO_BUILDING;
if (!passedBuildingCheck)
{
SpecialBuildingTypes specialBuildingType = (SpecialBuildingTypes)gGlobals.getBuildingInfo(node.prereqBuildingType).getSpecialBuildingType();
if (specialBuildingType != NO_SPECIALBUILDING)
{
passedBuildingCheck = player_.getCivHelper()->getSpecialBuildingNotRequiredCount(specialBuildingType) > 0;
}
}
#ifdef ALTAI_DEBUG
//os << "\narea check = " << passedAreaCheck << ", bonus check = " << passedBonusCheck << ", building check = " << passedBuildingCheck;
#endif
CityIter cityIter(*player_.getCvPlayer());
CvCity* pCity;
while (pCity = cityIter())
{
if (!passedAreaCheck)
{
if (node.domainType == DOMAIN_SEA)
{
if (pCity->isCoastal(node.minAreaSize))
{
passedAreaCheck = true;
}
}
else if (node.domainType == DOMAIN_LAND)
{
if (pCity->area()->getNumTiles() >= node.minAreaSize)
{
passedAreaCheck = true;
}
}
}
if (!passedBonusCheck)
{
bool foundAllAndBonuses = true, foundOrBonus = node.orBonusTypes.empty();
for (size_t i = 0, count = node.andBonusTypes.size(); i < count; ++i)
{
if (!pCity->hasBonus(node.andBonusTypes[i]))
{
foundAllAndBonuses = false;
break;
}
}
if (foundAllAndBonuses)
{
for (size_t i = 0, count = node.orBonusTypes.size(); i < count; ++i)
{
if (pCity->hasBonus(node.orBonusTypes[i]))
{
foundOrBonus = true;
break;
}
}
//.........这里部分代码省略.........