Fewer calculations in unit::resistance_against()...

...for the common case of no resistance abilities.
This commit is contained in:
J. Tyne 2013-02-15 16:45:16 +00:00
parent 349105420d
commit 325a27806d

View File

@ -2289,26 +2289,27 @@ bool unit::resistance_filter_matches(const config& cfg, bool attacker, const std
int unit::resistance_against(const std::string& damage_name,bool attacker,const map_location& loc) const
{
int res = 0;
int res = 100;
if (const config &resistance = cfg_.child("resistance")) {
res = 100 - resistance[damage_name].to_int(100);
res = resistance[damage_name].to_int(100);
}
unit_ability_list resistance_abilities = get_abilities("resistance",loc);
for (unit_ability_list::iterator i = resistance_abilities.begin(); i != resistance_abilities.end();) {
if(!resistance_filter_matches(*i->first, attacker, damage_name, res)) {
if(!resistance_filter_matches(*i->first, attacker, damage_name, 100-res)) {
i = resistance_abilities.erase(i);
} else {
++i;
}
}
if(!resistance_abilities.empty()) {
unit_abilities::effect resist_effect(resistance_abilities,res,false);
unit_abilities::effect resist_effect(resistance_abilities, 100-res, false);
res = std::min<int>(resist_effect.get_composite_value(),resistance_abilities.highest("max_value").first);
res = 100 - std::min<int>(resist_effect.get_composite_value(),
resistance_abilities.highest("max_value").first);
}
return 100 - res;
return res;
}
utils::string_map unit::get_base_resistances() const