mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-11 09:54:19 +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 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")) {
|
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);
|
unit_ability_list resistance_abilities = get_abilities("resistance",loc);
|
||||||
for (unit_ability_list::iterator i = resistance_abilities.begin(); i != resistance_abilities.end();) {
|
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);
|
i = resistance_abilities.erase(i);
|
||||||
} else {
|
} else {
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!resistance_abilities.empty()) {
|
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
|
utils::string_map unit::get_base_resistances() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user