The Battle for Wesnoth  1.19.17+dev
Classes | Public Member Functions | Static Public Member Functions | Private Types | Private Attributes | Friends | List of all members
attack_type Class Reference

#include <attack_type.hpp>

Inheritance diagram for attack_type:

Classes

class  recursion_guard
 Helper similar to std::unique_lock for detecting when calculations such as has_special have entered infinite recursion. More...
 
class  specials_context_t
 

Public Member Functions

 attack_type (const config &cfg)
 
const t_stringname () const
 
const std::string & id () const
 
const std::string & type () const
 
const std::string & icon () const
 
const std::string & range () const
 
int min_range () const
 
int max_range () const
 
std::string accuracy_parry_description () const
 
std::string accuracy_parry_tooltip () const
 
int accuracy () const
 
int parry () const
 
int damage () const
 
int num_attacks () const
 
double attack_weight () const
 
double defense_weight () const
 
const ability_vectorspecials () const
 
config specials_cfg () const
 
ability_vector specials (const std::string &tag) const
 
void set_name (const t_string &value)
 
void set_id (const std::string &value)
 
void set_type (const std::string &value)
 
void set_icon (const std::string &value)
 
void set_range (const std::string &value)
 
void set_min_range (int value)
 
void set_max_range (int value)
 
void set_attack_alignment (const std::string &value)
 
void set_accuracy (int value)
 
void set_parry (int value)
 
void set_damage (int value)
 
void set_num_attacks (int value)
 
void set_attack_weight (double value)
 
void set_defense_weight (double value)
 
void set_specials_cfg (const config &value)
 
bool has_special (const std::string &special, bool simple_check=false) const
 Returns whether or not *this has a special with a tag or id equal to special. More...
 
active_ability_list get_specials (const std::string &special) const
 Returns the currently active specials as an ability list, given the current context (see set_specials_context). More...
 
std::vector< std::pair< t_string, t_string > > special_tooltips (boost::dynamic_bitset<> *active_list=nullptr) const
 Returns a vector of names and descriptions for the specials of *this. More...
 
std::vector< std::pair< t_string, t_string > > abilities_special_tooltips (boost::dynamic_bitset<> *active_list) const
 
utils::optional< unit_alignments::type > alignment () const
 Returns alignment specified by alignment_ variable. More...
 
std::string alignment_str () const
 Returns alignment specified by alignment() for filtering when exist. More...
 
bool attack_empty () const
 Returns true if this is a dummy attack_type, for example the placeholder that the unit_attack dialog uses when a defender has no weapon for a given range. More...
 
void remove_special_by_filter (const config &filter)
 remove special if matche condition More...
 
bool matches_filter (const config &filter, const std::string &check_if_recursion="") const
 Returns whether or not *this matches the given filter. More...
 
void apply_effect (const config &cfg)
 Applies effect modifications described by cfg. More...
 
int movement_used () const
 
void set_movement_used (int value)
 
int attacks_used () const
 
void set_attacks_used (int value)
 
void write (config &cfg) const
 
config to_config () const
 
void add_formula_context (wfl::map_formula_callable &) const
 
recursion_guard update_variables_recursion (const config &special) const
 Tests which might otherwise cause infinite recursion should call this, check that the returned object evaluates to true, and then keep the object returned as long as the recursion might occur, similar to a reentrant mutex that's limited to a small number of reentrances. More...
 
specials_context_t specials_context (unit_const_ptr self, unit_const_ptr other, const map_location &unit_loc, const map_location &other_loc, bool attacking, const_attack_ptr other_attack) const
 
specials_context_t specials_context (unit_const_ptr self, const map_location &loc, bool attacking=true) const
 
specials_context_t specials_context (const unit_type &self_type, const map_location &loc, bool attacking=true) const
 
specials_context_t specials_context_for_listing (bool attacking=true) const
 
void set_changed (bool value)
 
bool get_changed () const
 

Static Public Member Functions

static std::string describe_effect (const config &cfg)
 Generates a description of the effect specified by cfg, if applicable. More...
 

Private Types

enum  AFFECTS { AFFECT_SELF =1 , AFFECT_OTHER =2 , AFFECT_EITHER =3 }
 

Private Attributes

map_location self_loc_
 
map_location other_loc_
 
unit_const_ptr self_
 
unit_const_ptr other_
 
bool is_attacker_
 
const_attack_ptr other_attack_
 
bool is_for_listing_ = false
 
t_string description_
 
std::string id_
 
std::string type_
 
std::string icon_
 
std::string range_
 
int min_range_
 
int max_range_
 
utils::optional< unit_alignments::type > alignment_
 
int damage_
 
int num_attacks_
 
double attack_weight_
 
double defense_weight_
 
int accuracy_
 
int movement_used_
 
int attacks_used_
 
int parry_
 
ability_vector specials_
 
bool changed_
 
std::vector< const config * > open_queries_
 While processing a recursive match, all the filters that are currently being checked, oldest first. More...
 

Friends

class specials_context_t
 

already added

std::string describe_weapon_specials () const
 Returns a comma-separated string of active names for the specials of *this. More...
 
std::string describe_weapon_specials_value (const std::set< std::string > &checking_tags) const
 
void modified_attacks (unsigned &min_attacks, unsigned &max_attacks) const
 Calculates the number of attacks this weapon has, considering specials. More...
 
std::pair< std::string, std::set< std::string > > damage_types () const
 Return a type()/replacement_type and a list of alternative_types that should be displayed in the selected unit's report. More...
 
std::pair< std::string, int > effective_damage_type () const
 The type of attack used and the resistance value that does the most damage. More...
 
double modified_damage () const
 Returns the damage per attack of this weapon, considering specials. More...
 
int modified_chance_to_hit (int cth, bool special_only=false) const
 Return the defense value, considering specials. More...
 
int composite_value (const active_ability_list &abil_list, int base_value) const
 Return the special weapon value, considering specials. More...
 
active_ability_list get_weapon_ability (const std::string &ability) const
 Returns list for weapon like abilities for each ability type. More...
 
active_ability_list get_specials_and_abilities (const std::string &special) const
 
bool has_special_or_ability (const std::string &special) const
 used for abilities used like weapon and true specials More...
 
bool has_filter_special_or_ability (const config &filter, bool simple_check=false) const
 check if special matche More...
 
bool has_special_or_ability_with_filter (const config &filter) const
 check if special matche More...
 
bool special_matches_filter (const unit_ability_t &ab, const config &filter) const
 Filter a list of abilities or weapon specials. More...
 
std::string select_replacement_type (const active_ability_list &damage_type_list) const
 Select best damage type based on frequency count for replacement_type. More...
 
std::pair< std::string, int > select_alternative_type (const active_ability_list &damage_type_list, const active_ability_list &resistance_list) const
 Select best damage type based on highest damage for alternative_type. More...
 
active_ability_list overwrite_special_overwriter (active_ability_list overwriters) const
 Filter a list of abilities or weapon specials, removing any entries that don't own the overwrite_specials attributes. More...
 
bool overwrite_special_checking (active_ability_list &overwriters, const unit_ability_t &ab) const
 Check whether cfg would be overwritten by any element of overwriters. More...
 
bool special_active (const unit_ability_t &ab, AFFECTS whom, bool in_abilities_tag=false) const
 
bool special_tooltip_active (const unit_ability_t &ab) const
 Returns whether or not the given special is active for the specified unit disregarding other units, based on the current context (see specials_context). More...
 
static void weapon_specials_impl_self (std::string &temp_string, const unit_const_ptr &self, const const_attack_ptr &self_attack, const const_attack_ptr &other_attack, const map_location &self_loc, AFFECTS whom, std::set< std::string > &checking_name, const std::set< std::string > &checking_tags={}, bool leader_bool=false)
 weapon_specials_impl_self and weapon_specials_impl_adj : check if special name can be added. More...
 
static void weapon_specials_impl_adj (std::string &temp_string, const unit_const_ptr &self, const const_attack_ptr &self_attack, const const_attack_ptr &other_attack, const map_location &self_loc, AFFECTS whom, std::set< std::string > &checking_name, const std::set< std::string > &checking_tags={}, const std::string &affect_adjacents="", bool leader_bool=false)
 
static bool check_self_abilities_impl (const const_attack_ptr &self_attack, const const_attack_ptr &other_attack, const unit_ability_t &ab, const unit_const_ptr &u, const map_location &loc, AFFECTS whom, bool leader_bool=false)
 check_self_abilities_impl : return an boolean value for checking of activities of abilities used like weapon More...
 
static bool check_adj_abilities_impl (const const_attack_ptr &self_attack, const const_attack_ptr &other_attack, const unit_ability_t &ab, const unit_const_ptr &u, const unit &from, std::size_t dist, int dir, const map_location &loc, const map_location &from_loc, AFFECTS whom, bool leader_bool=false)
 check_adj_abilities_impl : return an boolean value for checking of activities of abilities used like weapon in unit adjacent to fighter More...
 
static bool special_active_impl (const const_attack_ptr &self_attack, const const_attack_ptr &other_attack, const unit_ability_t &special, AFFECTS whom, bool in_abilities_tag=false)
 Returns whether or not the given special is active for the specified unit, based on the current context (see set_specials_context). More...
 
static bool has_ability_impl (const const_attack_ptr &self_attack, const unit_const_ptr &self, const map_location &self_loc, const const_attack_ptr &other_attack, AFFECTS whom, const std::string &special)
 has_ability_impl : return an boolean value for checking of activities of abilities used like weapon More...
 
static bool special_distant_filtering_impl (const const_attack_ptr &self_attack, const unit_const_ptr &self, const map_location &self_loc, const const_attack_ptr &other_attack, AFFECTS whom, const config &filter, bool sub_filter, bool leader_bool=false)
 special_distant_filtering_impl : return an boolean value if special matche with filter More...
 

Detailed Description

Definition at line 84 of file attack_type.hpp.

Member Enumeration Documentation

◆ AFFECTS

enum attack_type::AFFECTS
private
Enumerator
AFFECT_SELF 
AFFECT_OTHER 
AFFECT_EITHER 

Definition at line 284 of file attack_type.hpp.

Constructor & Destructor Documentation

◆ attack_type()

attack_type::attack_type ( const config cfg)
explicit

Member Function Documentation

◆ abilities_special_tooltips()

std::vector< std::pair< t_string, t_string > > attack_type::abilities_special_tooltips ( boost::dynamic_bitset<> *  active_list) const

Definition at line 838 of file abilities.cpp.

References distance_between(), t_string::empty(), and unit::name().

◆ accuracy()

int attack_type::accuracy ( ) const
inline

Definition at line 98 of file attack_type.hpp.

References accuracy_.

Referenced by impl_unit_attack_get(), and matches_simple_filter().

◆ accuracy_parry_description()

std::string attack_type::accuracy_parry_description ( ) const

Definition at line 196 of file attack_type.cpp.

References accuracy_, parry_, s, and utils::signed_percent().

◆ accuracy_parry_tooltip()

std::string attack_type::accuracy_parry_tooltip ( ) const

Definition at line 212 of file attack_type.cpp.

References _(), accuracy_, markup::bold(), parry_, utils::signed_percent(), and tooltip.

◆ add_formula_context()

void attack_type::add_formula_context ( wfl::map_formula_callable callable) const

Definition at line 592 of file abilities.cpp.

References wfl::map_formula_callable::add().

◆ alignment()

utils::optional<unit_alignments::type> attack_type::alignment ( ) const
inline

Returns alignment specified by alignment_ variable.

Definition at line 149 of file attack_type.hpp.

References alignment_.

◆ alignment_str()

std::string attack_type::alignment_str ( ) const
inline

Returns alignment specified by alignment() for filtering when exist.

Definition at line 152 of file attack_type.hpp.

References alignment_, and string_enums::enum_base< Definition >::get_string().

Referenced by impl_unit_attack_get(), matches_simple_filter(), and write().

◆ apply_effect()

void attack_type::apply_effect ( const config cfg)

◆ attack_empty()

bool attack_type::attack_empty ( ) const
inline

Returns true if this is a dummy attack_type, for example the placeholder that the unit_attack dialog uses when a defender has no weapon for a given range.

Definition at line 198 of file attack_type.hpp.

References name(), range(), and type().

Referenced by effective_damage_type().

◆ attack_weight()

double attack_type::attack_weight ( ) const
inline

Definition at line 102 of file attack_type.hpp.

References attack_weight_.

Referenced by battle_context::choose_attacker_weapon(), and impl_unit_attack_get().

◆ attacks_used()

int attack_type::attacks_used ( ) const
inline

Definition at line 224 of file attack_type.hpp.

References attacks_used_.

Referenced by impl_unit_attack_get(), and matches_simple_filter().

◆ check_adj_abilities_impl()

bool attack_type::check_adj_abilities_impl ( const const_attack_ptr self_attack,
const const_attack_ptr other_attack,
const unit_ability_t ab,
const unit_const_ptr u,
const unit from,
std::size_t  dist,
int  dir,
const map_location loc,
const map_location from_loc,
AFFECTS  whom,
bool  leader_bool = false 
)
staticprivate

check_adj_abilities_impl : return an boolean value for checking of activities of abilities used like weapon in unit adjacent to fighter

Returns
True if the special tag_name is active.
Parameters
self_attackthe attack used by unit who fight.
other_attackthe attack used by opponent.
abthe ability/special checked
uthe unit who is or not affected by an abilities owned by from.
fromunit distant to u is checked.
distdistance between unit distant and u.
dirdirection to research a unit distant to u.
loclocation of the unit checked.
from_loclocation of the unit distant to u.
whomdetermine if unit affected or not by special ability.
leader_boolIf true, [leadership] abilities are checked.

Definition at line 1651 of file abilities.cpp.

References loc, special_active_impl(), and unit_ability_t::tag().

Referenced by has_ability_impl(), and special_distant_filtering_impl().

◆ check_self_abilities_impl()

bool attack_type::check_self_abilities_impl ( const const_attack_ptr self_attack,
const const_attack_ptr other_attack,
const unit_ability_t ab,
const unit_const_ptr u,
const map_location loc,
AFFECTS  whom,
bool  leader_bool = false 
)
staticprivate

check_self_abilities_impl : return an boolean value for checking of activities of abilities used like weapon

Returns
True if the special tag_name is active.
Parameters
self_attackthe attack used by unit checked in this function.
other_attackthe attack used by opponent to unit checked.
abthe ability/special checked
uthe unit checked.
loclocation of the unit checked.
whomdetermine if unit affected or not by special ability.
leader_boolIf true, [leadership] abilities are checked.

Definition at line 1636 of file abilities.cpp.

References loc, special_active_impl(), and unit_ability_t::tag().

Referenced by has_ability_impl(), and special_distant_filtering_impl().

◆ composite_value()

int attack_type::composite_value ( const active_ability_list abil_list,
int  base_value 
) const

Return the special weapon value, considering specials.

Parameters
abil_listThe list of special checked.
base_valueThe value modified or not by function.

Definition at line 1501 of file abilities.cpp.

References unit_abilities::effect::get_composite_value().

Referenced by modified_attacks(), and modified_chance_to_hit().

◆ damage()

int attack_type::damage ( ) const
inline

◆ damage_types()

std::pair< std::string, std::set< std::string > > attack_type::damage_types ( ) const

Return a type()/replacement_type and a list of alternative_types that should be displayed in the selected unit's report.

Returns
A type()/replacement_type and a list of alternative_types that should be displayed in the selected unit's report.

Definition at line 1276 of file abilities.cpp.

References c, active_ability_list::empty(), get_specials_and_abilities(), i, select_replacement_type(), and type().

◆ defense_weight()

double attack_type::defense_weight ( ) const
inline

Definition at line 103 of file attack_type.hpp.

References defense_weight_.

Referenced by battle_context::choose_defender_weapon(), and impl_unit_attack_get().

◆ describe_effect()

std::string attack_type::describe_effect ( const config cfg)
static

Generates a description of the effect specified by cfg, if applicable.

This covers a subset of the effects which can be applied via apply_effect.

Definition at line 560 of file attack_type.cpp.

References cfg, config_attribute_value::empty(), utils::print_modifier(), set_accuracy(), set_attacks_used(), set_damage(), set_max_range(), set_min_range(), set_parry(), config_attribute_value::to_int(), VGETTEXT, and VNGETTEXT.

Referenced by unit::describe_builtin_effect().

◆ describe_weapon_specials()

std::string attack_type::describe_weapon_specials ( ) const

Returns a comma-separated string of active names for the specials of *this.

Empty names are skipped.

Whether or not a special is active depends on the current context (see set_specials_context)

Definition at line 919 of file abilities.cpp.

References t_string::empty(), font::INACTIVE_COLOR, utils::join(), unit::name(), markup::span_color(), t_string::str(), and unit_abilities::substitute_variables().

Referenced by events::mouse_handler::show_attack_dialog().

◆ describe_weapon_specials_value()

std::string attack_type::describe_weapon_specials_value ( const std::set< std::string > &  checking_tags) const

Definition at line 964 of file abilities.cpp.

References _(), add_name(), and add_name_list().

Referenced by events::mouse_handler::show_attack_dialog().

◆ effective_damage_type()

std::pair< std::string, int > attack_type::effective_damage_type ( ) const

The type of attack used and the resistance value that does the most damage.

Returns
The type of attack used and the resistance value that does the most damage.

Definition at line 1245 of file abilities.cpp.

References attack_empty(), active_ability_list::empty(), utils::erase_if(), get_specials_and_abilities(), i, is_attacker_, other_, other_attack_, other_loc_, select_alternative_type(), select_replacement_type(), and type().

Referenced by matches_simple_filter(), and events::mouse_handler::show_attack_dialog().

◆ get_changed()

bool attack_type::get_changed ( ) const
inline

Definition at line 507 of file attack_type.hpp.

References changed_.

◆ get_specials()

active_ability_list attack_type::get_specials ( const std::string &  special) const

Returns the currently active specials as an ability list, given the current context (see set_specials_context).

Definition at line 769 of file abilities.cpp.

References active_ability_list::emplace_back(), and loc.

Referenced by get_specials_and_abilities(), and modified_chance_to_hit().

◆ get_specials_and_abilities()

active_ability_list attack_type::get_specials_and_abilities ( const std::string &  special) const
Parameters
specialthe tag name to check for
Returns
list which contains get_weapon_ability and get_specials list for each ability type, with overwritten items removed

Definition at line 1484 of file abilities.cpp.

References active_ability::ability(), active_ability_list::append(), active_ability_list::empty(), utils::erase_if(), get_specials(), get_weapon_ability(), overwrite_special_checking(), and overwrite_special_overwriter().

Referenced by damage_types(), effective_damage_type(), modified_attacks(), modified_chance_to_hit(), and modified_damage().

◆ get_weapon_ability()

active_ability_list attack_type::get_weapon_ability ( const std::string &  ability) const

Returns list for weapon like abilities for each ability type.

Definition at line 1465 of file abilities.cpp.

References active_ability_list::append_if(), i, loc, other_, other_loc_, self_, and self_loc_.

Referenced by get_specials_and_abilities().

◆ has_ability_impl()

bool attack_type::has_ability_impl ( const const_attack_ptr self_attack,
const unit_const_ptr self,
const map_location self_loc,
const const_attack_ptr other_attack,
AFFECTS  whom,
const std::string &  special 
)
staticprivate

has_ability_impl : return an boolean value for checking of activities of abilities used like weapon

Returns
True if special is active.
Parameters
self_attackthe attack used by unit who fight.
other_attackthe attack used by opponent.
selfthe unit who fight.
self_loclocation of self.
whomdetermine if unit affected or not by special ability.
specialThe special ability type who is being checked.

Definition at line 1666 of file abilities.cpp.

References check_adj_abilities_impl(), check_self_abilities_impl(), and distance_between().

Referenced by has_special_or_ability().

◆ has_filter_special_or_ability()

bool attack_type::has_filter_special_or_ability ( const config filter,
bool  simple_check = false 
) const

check if special matche

Returns
True if special matche with filter(if 'active' filter is true, check if special active).
Parameters
simple_checkIf true, check whether the unit has the special. Else, check whether the special is currently active.
filtercontain attributes to check(special_id, special_type etc...).

Definition at line 1789 of file abilities.cpp.

References AFFECT_OTHER, AFFECT_SELF, utils::views::filter, other_, other_attack_, other_loc_, range(), self_, self_loc_, special_active(), special_distant_filtering_impl(), specials(), and utils::split_set().

Referenced by matches_simple_filter().

◆ has_special()

bool attack_type::has_special ( const std::string &  special,
bool  simple_check = false 
) const

Returns whether or not *this has a special with a tag or id equal to special.

Returns
True iff the special special is active.
Parameters
specialThe special being checked.
simple_checkIf true, check whether the unit has the special. Else, check whether the special is currently active.

If simple_check is set to true, then the check is merely for being present. Otherwise (the default), the check is for a special active in the current context (see set_specials_context), including specials obtained from the opponent's attack.

Definition at line 740 of file abilities.cpp.

Referenced by has_special_or_ability().

◆ has_special_or_ability()

bool attack_type::has_special_or_ability ( const std::string &  special) const

used for abilities used like weapon and true specials

Returns whether or not *this has a special ability with a tag or id equal to special.

Returns
True if the ability special is active.
Parameters
specialThe special being checked.

the Check is for a special ability active in the current context (see set_specials_context), including specials obtained from the opponent's attack.

Definition at line 1705 of file abilities.cpp.

References AFFECT_OTHER, AFFECT_SELF, has_ability_impl(), has_special(), other_, other_attack_, other_loc_, range(), self_, and self_loc_.

◆ has_special_or_ability_with_filter()

bool attack_type::has_special_or_ability_with_filter ( const config filter) const

check if special matche

Returns
True if special matche with filter(if 'active' filter is true, check if special active).
Parameters
filterif special check with filter, return true.

Definition at line 2034 of file abilities.cpp.

References AFFECT_OTHER, AFFECT_SELF, utils::views::filter, other_, other_attack_, other_loc_, range(), self_, self_loc_, special_active(), special_distant_filtering_impl(), special_matches_filter(), and specials().

Referenced by matches_simple_filter().

◆ icon()

const std::string& attack_type::icon ( ) const
inline

Definition at line 92 of file attack_type.hpp.

References icon_.

Referenced by impl_unit_attack_get(), and events::mouse_handler::show_attack_dialog().

◆ id()

const std::string& attack_type::id ( ) const
inline

Definition at line 90 of file attack_type.hpp.

References id_.

Referenced by impl_unit_attack_get(), and matches_simple_filter().

◆ matches_filter()

bool attack_type::matches_filter ( const config filter,
const std::string &  check_if_recursion = "" 
) const

Returns whether or not *this matches the given filter.

Definition at line 354 of file attack_type.cpp.

References utils::views::filter, and matches_simple_filter().

◆ max_range()

int attack_type::max_range ( ) const
inline

Definition at line 95 of file attack_type.hpp.

References max_range_.

Referenced by impl_unit_attack_get(), and matches_simple_filter().

◆ min_range()

int attack_type::min_range ( ) const
inline

Definition at line 94 of file attack_type.hpp.

References min_range_.

Referenced by impl_unit_attack_get(), and matches_simple_filter().

◆ modified_attacks()

void attack_type::modified_attacks ( unsigned &  min_attacks,
unsigned &  max_attacks 
) const

Calculates the number of attacks this weapon has, considering specials.

This returns two numbers because of the swarm special. The actual number of attacks depends on the unit's health and should be: min_attacks + (max_attacks - min_attacks) * (current hp) / (max hp) c.f. swarm_blows()

Definition at line 1162 of file abilities.cpp.

References composite_value(), active_ability_list::empty(), ERR_NG, get_specials_and_abilities(), active_ability_list::highest(), and num_attacks().

◆ modified_chance_to_hit()

int attack_type::modified_chance_to_hit ( int  cth,
bool  special_only = false 
) const

Return the defense value, considering specials.

Parameters
cthThe chance_to_hit value modified or not by function.
special_onlyDecide if get_specials() or get_specials_and_abilities()should be used.

Definition at line 1303 of file abilities.cpp.

References accuracy_, composite_value(), get_specials(), get_specials_and_abilities(), other_attack_, and parry().

◆ modified_damage()

double attack_type::modified_damage ( ) const

Returns the damage per attack of this weapon, considering specials.

Definition at line 1297 of file abilities.cpp.

References damage(), unit_abilities::effect::get_composite_double_value(), and get_specials_and_abilities().

◆ movement_used()

int attack_type::movement_used ( ) const
inline

Definition at line 222 of file attack_type.hpp.

References movement_used_.

Referenced by impl_unit_attack_get(), and matches_simple_filter().

◆ name()

const t_string& attack_type::name ( ) const
inline

◆ num_attacks()

int attack_type::num_attacks ( ) const
inline

◆ overwrite_special_checking()

bool attack_type::overwrite_special_checking ( active_ability_list overwriters,
const unit_ability_t ab 
) const
private

Check whether cfg would be overwritten by any element of overwriters.

Returns
True if element checked is overwritable.
Parameters
overwriterslist used for check if element is overwritable.
abthe ability/special checked

Definition at line 1548 of file abilities.cpp.

References unit_ability_t::cfg(), deprecated_message(), active_ability_list::empty(), INDEFINITE, is_attacker_, config::optional_child(), overwrite_special_affects(), and special_matches_filter().

Referenced by get_specials_and_abilities(), and overwrite_special_overwriter().

◆ overwrite_special_overwriter()

active_ability_list attack_type::overwrite_special_overwriter ( active_ability_list  overwriters) const
private

Filter a list of abilities or weapon specials, removing any entries that don't own the overwrite_specials attributes.

Parameters
overwriterslist that may have overwrite_specials attributes.

Definition at line 1512 of file abilities.cpp.

References active_ability::ability_cfg(), active_ability_list::empty(), utils::erase_if(), i, overwrite_special_affects(), overwrite_special_checking(), active_ability_list::size(), and utils::sort_if().

Referenced by get_specials_and_abilities().

◆ parry()

int attack_type::parry ( ) const
inline

Definition at line 99 of file attack_type.hpp.

References parry_.

Referenced by impl_unit_attack_get(), matches_simple_filter(), and modified_chance_to_hit().

◆ range()

const std::string& attack_type::range ( ) const
inline

◆ remove_special_by_filter()

void attack_type::remove_special_by_filter ( const config filter)

remove special if matche condition

Parameters
filterif special check with filter, it will be removed.

Definition at line 378 of file attack_type.cpp.

References utils::views::filter, i, special_matches_filter(), and specials_.

Referenced by apply_effect().

◆ select_alternative_type()

std::pair< std::string, int > attack_type::select_alternative_type ( const active_ability_list damage_type_list,
const active_ability_list resistance_list 
) const
private

Select best damage type based on highest damage for alternative_type.

Parameters
damage_type_listlist of [damage_type] to check.
resistance_listlist of "resistance" abilities to check for each type of damage checked.

Definition at line 1212 of file abilities.cpp.

References c, i, other_, and type().

Referenced by effective_damage_type().

◆ select_replacement_type()

std::string attack_type::select_replacement_type ( const active_ability_list damage_type_list) const
private

Select best damage type based on frequency count for replacement_type.

Parameters
damage_type_listlist of [damage_type] to check.

Definition at line 1183 of file abilities.cpp.

References c, i, and type().

Referenced by damage_types(), and effective_damage_type().

◆ set_accuracy()

void attack_type::set_accuracy ( int  value)
inline

Definition at line 122 of file attack_type.hpp.

References accuracy_, and set_changed().

Referenced by apply_effect(), describe_effect(), and impl_unit_attack_set().

◆ set_attack_alignment()

void attack_type::set_attack_alignment ( const std::string &  value)
inline

◆ set_attack_weight()

void attack_type::set_attack_weight ( double  value)
inline

Definition at line 126 of file attack_type.hpp.

References attack_weight_, and set_changed().

Referenced by apply_effect(), and impl_unit_attack_set().

◆ set_attacks_used()

void attack_type::set_attacks_used ( int  value)
inline

Definition at line 225 of file attack_type.hpp.

References attacks_used_.

Referenced by apply_effect(), describe_effect(), and impl_unit_attack_set().

◆ set_changed()

void attack_type::set_changed ( bool  value)
inline

◆ set_damage()

void attack_type::set_damage ( int  value)
inline

Definition at line 124 of file attack_type.hpp.

References damage_, and set_changed().

Referenced by apply_effect(), describe_effect(), and impl_unit_attack_set().

◆ set_defense_weight()

void attack_type::set_defense_weight ( double  value)
inline

Definition at line 127 of file attack_type.hpp.

References defense_weight_, and set_changed().

Referenced by apply_effect(), and impl_unit_attack_set().

◆ set_icon()

void attack_type::set_icon ( const std::string &  value)
inline

Definition at line 117 of file attack_type.hpp.

References icon_, and set_changed().

Referenced by apply_effect(), and impl_unit_attack_set().

◆ set_id()

void attack_type::set_id ( const std::string &  value)
inline

Definition at line 115 of file attack_type.hpp.

References id_, and set_changed().

Referenced by impl_unit_attack_set().

◆ set_max_range()

void attack_type::set_max_range ( int  value)
inline

Definition at line 120 of file attack_type.hpp.

References max_range_, and set_changed().

Referenced by apply_effect(), describe_effect(), and impl_unit_attack_set().

◆ set_min_range()

void attack_type::set_min_range ( int  value)
inline

Definition at line 119 of file attack_type.hpp.

References min_range_, and set_changed().

Referenced by apply_effect(), describe_effect(), and impl_unit_attack_set().

◆ set_movement_used()

void attack_type::set_movement_used ( int  value)
inline

Definition at line 223 of file attack_type.hpp.

References movement_used_.

Referenced by impl_unit_attack_set().

◆ set_name()

void attack_type::set_name ( const t_string value)
inline

Definition at line 114 of file attack_type.hpp.

References description_, and set_changed().

Referenced by apply_effect(), and impl_unit_attack_set().

◆ set_num_attacks()

void attack_type::set_num_attacks ( int  value)
inline

Definition at line 125 of file attack_type.hpp.

References num_attacks_, and set_changed().

Referenced by impl_unit_attack_set().

◆ set_parry()

void attack_type::set_parry ( int  value)
inline

Definition at line 123 of file attack_type.hpp.

References parry_, and set_changed().

Referenced by apply_effect(), describe_effect(), and impl_unit_attack_set().

◆ set_range()

void attack_type::set_range ( const std::string &  value)
inline

Definition at line 118 of file attack_type.hpp.

References range_, and set_changed().

Referenced by apply_effect(), and impl_unit_attack_set().

◆ set_specials_cfg()

void attack_type::set_specials_cfg ( const config value)
inline

Definition at line 128 of file attack_type.hpp.

References unit_ability_t::cfg_to_vector(), set_changed(), and specials_.

Referenced by impl_unit_attack_set().

◆ set_type()

void attack_type::set_type ( const std::string &  value)
inline

Definition at line 116 of file attack_type.hpp.

References set_changed(), and type_.

Referenced by apply_effect(), and impl_unit_attack_set().

◆ special_active()

bool attack_type::special_active ( const unit_ability_t ab,
AFFECTS  whom,
bool  in_abilities_tag = false 
) const
private

◆ special_active_impl()

bool attack_type::special_active_impl ( const const_attack_ptr self_attack,
const const_attack_ptr other_attack,
const unit_ability_t ab,
AFFECTS  whom,
bool  in_abilities_tag = false 
)
staticprivate

Returns whether or not the given special is active for the specified unit, based on the current context (see set_specials_context).

Parameters
self_attackthis unit's attack
other_attackthe other unit's attack
abthe ability
whomspecifies which combatant we care about
in_abilities_tagif special coded in [specials] or [abilities] tags

Definition at line 2090 of file abilities.cpp.

References AFFECT_EITHER, AFFECT_OTHER, AFFECT_SELF, unit_ability_t::cfg(), unit_map::find(), resources::gameboard, map_location::get_relative_dir(), unit_map::iterator_base< iter_types >::get_shared_ptr(), gamemap::is_village(), game_board::map(), unit::STATE_POISONED, unit::STATE_SLOWED, unit_ability_t::tag(), and unit_map::iterator_base< iter_types >::valid().

Referenced by check_adj_abilities_impl(), check_self_abilities_impl(), and special_active().

◆ special_distant_filtering_impl()

bool attack_type::special_distant_filtering_impl ( const const_attack_ptr self_attack,
const unit_const_ptr self,
const map_location self_loc,
const const_attack_ptr other_attack,
AFFECTS  whom,
const config filter,
bool  sub_filter,
bool  leader_bool = false 
)
staticprivate

special_distant_filtering_impl : return an boolean value if special matche with filter

Returns
True if the special is active.
Parameters
self_attackthe attack used by unit who fight.
other_attackthe attack used by opponent.
selfthe unit who fight.
self_loclocation of self.
whomdetermine if unit affected or not by special ability.
filterif special check with filter, return true.
sub_filterif true, check the attributes of [filter_special], else, check special(_id/type)(_active).
leader_boolIf true, [leadership] abilities are checked.

Definition at line 1745 of file abilities.cpp.

References check_adj_abilities_impl(), check_self_abilities_impl(), distance_between(), utils::views::filter, and utils::split_set().

Referenced by has_filter_special_or_ability(), and has_special_or_ability_with_filter().

◆ special_matches_filter()

bool attack_type::special_matches_filter ( const unit_ability_t ab,
const config filter 
) const
private

Filter a list of abilities or weapon specials.

Parameters
abthe ability/special
filterconfig contain list of attribute who are researched in cfg
Returns
true if all attribute with ability checked

Definition at line 2029 of file abilities.cpp.

References unit_ability_t::cfg(), utils::views::filter, and unit_ability_t::tag().

Referenced by has_special_or_ability_with_filter(), overwrite_special_checking(), and remove_special_by_filter().

◆ special_tooltip_active()

bool attack_type::special_tooltip_active ( const unit_ability_t ab) const
private

Returns whether or not the given special is active for the specified unit disregarding other units, based on the current context (see specials_context).

Parameters
abthe ability/special

Definition at line 2225 of file abilities.cpp.

References unit_ability_t::cfg(), is_attacker_, is_for_listing_, other_, self_, self_loc_, and unit_ability_t::tag().

◆ special_tooltips()

std::vector< std::pair< t_string, t_string > > attack_type::special_tooltips ( boost::dynamic_bitset<> *  active_list = nullptr) const

Returns a vector of names and descriptions for the specials of *this.

Each std::pair in the vector has first = name and second = description.

This uses either the active or inactive name/description for each special, based on the current context (see set_specials_context), provided active_list is not nullptr. Otherwise specials are assumed active. If the appropriate name is empty, the special is skipped.

Definition at line 802 of file abilities.cpp.

References t_string::empty(), unit::name(), t_string::str(), and unit_abilities::substitute_variables().

◆ specials() [1/2]

const ability_vector& attack_type::specials ( ) const
inline

Definition at line 104 of file attack_type.hpp.

References specials_.

Referenced by has_filter_special_or_ability(), and has_special_or_ability_with_filter().

◆ specials() [2/2]

ability_vector attack_type::specials ( const std::string &  tag) const
inline

Definition at line 110 of file attack_type.hpp.

References unit_ability_t::filter_tag(), specials_, and markup::tag().

◆ specials_cfg()

config attack_type::specials_cfg ( ) const
inline

Definition at line 106 of file attack_type.hpp.

References specials_, and unit_ability_t::vector_to_cfg().

Referenced by impl_unit_attack_get(), and write().

◆ specials_context() [1/3]

specials_context_t attack_type::specials_context ( const unit_type self_type,
const map_location loc,
bool  attacking = true 
) const
inline

Definition at line 497 of file attack_type.hpp.

References loc, and specials_context_t.

◆ specials_context() [2/3]

specials_context_t attack_type::specials_context ( unit_const_ptr  self,
const map_location loc,
bool  attacking = true 
) const
inline

Definition at line 494 of file attack_type.hpp.

References loc, and specials_context_t.

◆ specials_context() [3/3]

specials_context_t attack_type::specials_context ( unit_const_ptr  self,
unit_const_ptr  other,
const map_location unit_loc,
const map_location other_loc,
bool  attacking,
const_attack_ptr  other_attack 
) const
inline

◆ specials_context_for_listing()

specials_context_t attack_type::specials_context_for_listing ( bool  attacking = true) const
inline

Definition at line 500 of file attack_type.hpp.

References specials_context_t.

◆ to_config()

config attack_type::to_config ( ) const
inline

Definition at line 228 of file attack_type.hpp.

References c, and write().

Referenced by impl_unit_attack_get().

◆ type()

const std::string& attack_type::type ( ) const
inline

◆ update_variables_recursion()

attack_type::recursion_guard attack_type::update_variables_recursion ( const config special) const

Tests which might otherwise cause infinite recursion should call this, check that the returned object evaluates to true, and then keep the object returned as long as the recursion might occur, similar to a reentrant mutex that's limited to a small number of reentrances.

This only expects to be called in a single thread, but the whole of attack_type makes that assumption, for example its' mutable members are assumed to be set up by the current caller (or caller's caller, probably several layers up).

Definition at line 716 of file attack_type.cpp.

References utils::contains(), and open_queries_.

Referenced by unit::get_self_ability_bool().

◆ weapon_specials_impl_adj()

void attack_type::weapon_specials_impl_adj ( std::string &  temp_string,
const unit_const_ptr self,
const const_attack_ptr self_attack,
const const_attack_ptr other_attack,
const map_location self_loc,
AFFECTS  whom,
std::set< std::string > &  checking_name,
const std::set< std::string > &  checking_tags = {},
const std::string &  affect_adjacents = "",
bool  leader_bool = false 
)
staticprivate

Definition at line 1024 of file abilities.cpp.

References add_name(), and distance_between().

◆ weapon_specials_impl_self()

void attack_type::weapon_specials_impl_self ( std::string &  temp_string,
const unit_const_ptr self,
const const_attack_ptr self_attack,
const const_attack_ptr other_attack,
const map_location self_loc,
AFFECTS  whom,
std::set< std::string > &  checking_name,
const std::set< std::string > &  checking_tags = {},
bool  leader_bool = false 
)
staticprivate

weapon_specials_impl_self and weapon_specials_impl_adj : check if special name can be added.

Parameters
[in,out]temp_stringthe string modified and returned
[in]selfthe unit checked.
[in]self_attackthe attack used by unit checked in this function.
[in]other_attackthe attack used by opponent to unit checked.
[in]self_loclocation of the unit checked.
[in]whomdetermine if unit affected or not by special ability.
[in,out]checking_namethe reference for checking if a name is already added
[in]checking_tagsthe reference for checking if special ability type can be used
[in]leader_boolIf true, [leadership] abilities are checked.

Definition at line 1004 of file abilities.cpp.

References add_name().

◆ write()

void attack_type::write ( config cfg) const

Friends And Related Function Documentation

◆ specials_context_t

friend class specials_context_t
friend

Definition at line 458 of file attack_type.hpp.

Referenced by specials_context(), and specials_context_for_listing().

Member Data Documentation

◆ accuracy_

int attack_type::accuracy_
private

◆ alignment_

utils::optional<unit_alignments::type> attack_type::alignment_
private

Definition at line 519 of file attack_type.hpp.

Referenced by alignment(), alignment_str(), apply_effect(), and set_attack_alignment().

◆ attack_weight_

double attack_type::attack_weight_
private

Definition at line 522 of file attack_type.hpp.

Referenced by apply_effect(), attack_weight(), set_attack_weight(), and write().

◆ attacks_used_

int attack_type::attacks_used_
private

Definition at line 527 of file attack_type.hpp.

Referenced by apply_effect(), attacks_used(), set_attacks_used(), and write().

◆ changed_

bool attack_type::changed_
private

Definition at line 530 of file attack_type.hpp.

Referenced by get_changed(), and set_changed().

◆ damage_

int attack_type::damage_
private

Definition at line 520 of file attack_type.hpp.

Referenced by apply_effect(), damage(), set_damage(), and write().

◆ defense_weight_

double attack_type::defense_weight_
private

Definition at line 523 of file attack_type.hpp.

Referenced by apply_effect(), defense_weight(), set_defense_weight(), and write().

◆ description_

t_string attack_type::description_
private

Definition at line 513 of file attack_type.hpp.

Referenced by apply_effect(), attack_type(), name(), set_name(), and write().

◆ icon_

std::string attack_type::icon_
private

Definition at line 516 of file attack_type.hpp.

Referenced by apply_effect(), attack_type(), icon(), set_icon(), and write().

◆ id_

std::string attack_type::id_
private

Definition at line 514 of file attack_type.hpp.

Referenced by apply_effect(), attack_type(), id(), set_id(), and write().

◆ is_attacker_

bool attack_type::is_attacker_
mutableprivate

◆ is_for_listing_

bool attack_type::is_for_listing_ = false
mutableprivate

◆ max_range_

int attack_type::max_range_
private

Definition at line 518 of file attack_type.hpp.

Referenced by apply_effect(), max_range(), set_max_range(), and write().

◆ min_range_

int attack_type::min_range_
private

Definition at line 518 of file attack_type.hpp.

Referenced by apply_effect(), min_range(), set_min_range(), and write().

◆ movement_used_

int attack_type::movement_used_
private

Definition at line 526 of file attack_type.hpp.

Referenced by apply_effect(), movement_used(), set_movement_used(), and write().

◆ num_attacks_

int attack_type::num_attacks_
private

Definition at line 521 of file attack_type.hpp.

Referenced by apply_effect(), num_attacks(), set_num_attacks(), and write().

◆ open_queries_

std::vector<const config*> attack_type::open_queries_
mutableprivate

While processing a recursive match, all the filters that are currently being checked, oldest first.

Each will have an instance of recursion_guard that is currently allocated permission to recurse, and which will pop the config off this stack when the recursion_guard is finalized.

Definition at line 536 of file attack_type.hpp.

Referenced by update_variables_recursion().

◆ other_

unit_const_ptr attack_type::other_
mutableprivate

◆ other_attack_

const_attack_ptr attack_type::other_attack_
mutableprivate

◆ other_loc_

map_location attack_type::other_loc_
private

◆ parry_

int attack_type::parry_
private

◆ range_

std::string attack_type::range_
private

Definition at line 517 of file attack_type.hpp.

Referenced by apply_effect(), range(), set_range(), and write().

◆ self_

unit_const_ptr attack_type::self_
mutableprivate

◆ self_loc_

map_location attack_type::self_loc_
mutableprivate

◆ specials_

ability_vector attack_type::specials_
private

◆ type_

std::string attack_type::type_
private

Definition at line 515 of file attack_type.hpp.

Referenced by apply_effect(), set_type(), type(), and write().


The documentation for this class was generated from the following files: