mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-10 15:14:16 +00:00
Fewer calculations in unit::resistance_against()...
...for the common case of no resistance abilities.
This commit is contained in:
parent
349105420d
commit
325a27806d
13
src/unit.cpp
13
src/unit.cpp
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user