int BonusList::valOfBonuses(const CSelector &select) const { BonusList ret; CSelector limit = nullptr; getBonuses(ret, select, limit); ret.eliminateDuplicates(); return ret.totalValue(); }
void BonusList::getBonuses(BonusList & out, const CSelector &selector) const { // for(Bonus *i : *this) // if(selector(i) && i->effectRange == Bonus::NO_LIMIT) // out.push_back(i); getBonuses(out, selector, nullptr); }
void BonusList::getBonuses(BonusList & out, const CSelector &selector) const { // BOOST_FOREACH(Bonus *i, *this) // if(selector(i) && i->effectRange == Bonus::NO_LIMIT) // out.push_back(i); getBonuses(out, selector, 0); }
void CGHeroInstance::recreateSecondarySkillsBonuses() { auto secondarySkillsBonuses = getBonuses(Selector::sourceType(Bonus::SECONDARY_SKILL)); for(auto bonus : *secondarySkillsBonuses) removeBonus(bonus); for(auto skill_info : secSkills) updateSkill(SecondarySkill(skill_info.first), skill_info.second); }
const TBonusListPtr IBonusBearer::getSpellBonuses() const { std::stringstream cachingStr; cachingStr << "source_" << Bonus::SPELL_EFFECT; return getBonuses(Selector::sourceType(Bonus::SPELL_EFFECT), Selector::anyRange(), cachingStr.str()); }
int IBonusBearer::getBonusesCount(const CSelector &selector, const std::string &cachingStr /* =""*/) const { return getBonuses(selector, cachingStr)->size(); }
void IBonusBearer::getModifiersWDescr(TModDescr &out, const CSelector &selector, const std::string &cachingStr /* =""*/) const { getBonuses(selector, cachingStr)->getModifiersWDescr(out); }
bool IBonusBearer::hasBonus(const CSelector &selector, const std::string &cachingStr /*= ""*/) const { return getBonuses(selector, cachingStr)->size() > 0; }