The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
types.hpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2003 - 2025
3 by David White <dave@whitevine.net>
4 Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY.
12
13 See the COPYING file for more details.
14*/
15
16#pragma once
17
18#include "gettext.hpp"
19#include "movetype.hpp"
21#include "units/race.hpp"
22#include "units/attack_type.hpp"
23#include "units/type_error.hpp"
24#include "game_config_view.hpp"
25
26#include <memory>
27#include <array>
28#include <map>
29#include <set>
30#include <string>
31#include <vector>
32
33class unit_animation;
34
35typedef std::map<std::string, movetype> movement_type_map;
36
37
38/**
39 * A single unit type that the player may recruit.
40 * Individual units are defined by the unit class.
41 */
43{
44private:
45 struct default_ctor_t {};
46 unit_type(default_ctor_t, const config& cfg, const std::string& parent_id);
47
48public:
50 /**
51 * Creates a unit type for the given config, but delays its build
52 * till later.
53 * @note @a cfg is not copied, so it has to point to some permanent
54 * storage, that is, a child of unit_type_data::unit_cfg.
55 */
56 explicit unit_type(const config& cfg, const std::string& parent_id="");
57 /**
58 * Creates a unit type for the given config, but delays its build
59 * till later.
60 * @note @a cfg is copied
61 */
62 explicit unit_type(config&& cfg, const std::string& parent_id="");
63
64 unit_type(const unit_type&) = delete;
65 unit_type& operator=(const unit_type&) = delete;
66
67 unit_type(unit_type&&) noexcept = default;
68 unit_type& operator=(unit_type&&) noexcept = default;
69
70 ~unit_type();
71
72 /**
73 * Records the status of the lazy building of unit types.
74 * These are in order of increasing levels of being built.
75 * HELP_INDEX is already defined in a windows header under some conditions
76 */
78
79 /**
80 * Validate the id argument.
81 * Replaces invalid characters in the reference with underscores.
82 * @param id The proposed id for a unit_type.
83 * @throw error if id starts with a space.
84 */
85 static void check_id(std::string& id);
86
87private: // These will be called by build().
88 /** Load data into an empty unit_type (build to FULL). */
89 void build_full(const movement_type_map& movement_types,
90 const race_map& races, const config_array_view& traits);
91 /** Partially load data into an empty unit_type (build to HELP_INDEXED). */
92 void build_help_index(const movement_type_map& movement_types,
93 const race_map& races, const config_array_view& traits);
94 /** Load the most needed data into an empty unit_type (build to CREATE). */
95 void build_created();
96
97 typedef std::map<std::string, unit_type> variations_map;
98public:
99 /** Performs a build of this to the indicated stage. */
100 void build(BUILD_STATUS status, const movement_type_map& movement_types,
101 const race_map& races, const config_array_view& traits);
102 /**
103 * Performs a build of this to the indicated stage.
104 * (This does not logically change the unit type, so allow const access.)
105 */
106 void build(BUILD_STATUS status, const movement_type_map& movement_types,
107 const race_map& races, const config_array_view& traits) const
108 { const_cast<unit_type *>(this)->build(status, movement_types, races, traits); }
109
110
111 /** Get the advancement tree
112 * @return A set of ids of all unit_type objects that this unit_type can
113 * directly or indirectly advance to.
114 */
115 std::set<std::string> advancement_tree() const;
116
117 const ability_vector& abilities() const { return abilities_; }
118 /** A vector of unit_type ids that this unit_type can advance to. */
119 const std::vector<std::string>& advances_to() const { return advances_to_; }
120 /** A vector of unit_type ids that can advance to this unit_type. */
121 const std::vector<std::string> advances_from() const;
122
123 /** Returns two iterators pointing to a range of AMLA configs. */
126
127 /**
128 * Returns a gendered variant of this unit_type.
129 * @param gender "male" or "female".
130 */
131 const unit_type& get_gender_unit_type(const std::string& gender) const;
132 /** Returns a gendered variant of this unit_type based on the given parameter. */
134
135 const unit_type& get_variation(const std::string& id) const;
136 /** Info on the type of unit that the unit reanimates as. */
137 const std::string& undead_variation() const { return undead_variation_; }
138
139 unsigned int num_traits() const { return num_traits_; }
140
141 /** The name of the unit in the current language setting. */
142 const t_string& type_name() const { return type_name_; }
143
144 /** The id for this unit_type. */
145 const std::string& id() const { return id_; }
146 /** A variant on id() that is more descriptive, for use with message logging. */
147 const std::string log_id() const { return id_ + debug_id_; }
148 /** The id of the original type from which this (variation) descended. */
149 const std::string& parent_id() const { return parent_id_; }
150 /** The id of this variation; empty if it's a gender variation or a base unit. */
151 const std::string& variation_id() const { return variation_id_; }
152 // NOTE: this used to be a const object reference, but it messed up with the
153 // translation engine upon changing the language in the same session.
155 /**
156 * Returns only the notes defined by [unit_type][special_note] tags, excluding
157 * any that would be found from abilities, attacks, etc.
158 */
159 std::vector<t_string> direct_special_notes() const { return special_notes_; }
160 /**
161 * Returns all notes that should be displayed in the help page for this type,
162 * including those found in abilities and attacks.
163 */
164 std::vector<t_string> special_notes() const;
165 int hitpoints() const { return hitpoints_; }
166 double hp_bar_scaling() const { return hp_bar_scaling_; }
167 double xp_bar_scaling() const { return xp_bar_scaling_; }
168 int level() const { return level_; }
169 int recall_cost() const { return recall_cost_;}
170 int movement() const { return movement_; }
171 int vision() const { return vision_ < 0 ? movement() : vision_; }
172 /** If @a base_value is set to true, do not fall back to movement(). */
173 int vision(bool base_value) const { return base_value ? vision_ : vision(); }
174 int jamming() const {return jamming_; }
175 int max_attacks() const { return max_attacks_; }
176 int cost() const { return cost_; }
177 const std::string& default_variation() const { return default_variation_; }
178 const t_string& variation_name() const { return variation_name_; }
179 const std::string& usage() const { return usage_; }
180 const std::string& image() const { return image_; }
181 const std::string& icon() const { return icon_; }
182 const std::string& small_profile() const { return small_profile_; }
183 const std::string& big_profile() const { return profile_; }
184 std::string halo() const { return get_cfg()["halo"]; }
185 std::string footprints() const { return get_cfg()["footprints"]; }
186 std::string ellipse() const { return get_cfg()["ellipse"]; }
187 bool generate_name() const { return get_cfg()["generate_name"].to_bool(true); }
188 const std::vector<unit_animation>& animations() const;
189
190 const std::string& flag_rgb() const;
191
193 const std::string movement_type_id() const {return movement_type_id_; }
194 const movetype& movement_type() const { return movement_type_; }
195
196 int experience_needed(bool with_acceleration=true) const;
197
198 unit_alignments::type alignment() const { return alignment_; }
199 static std::string alignment_description(unit_alignments::type align, unit_race::GENDER gender = unit_race::MALE);
200
202 {
203 //TODO:most of the member of this class seem to be unused.
204 explicit ability_metadata(const config& cfg);
205
206 std::string id;
207
208 std::string help_topic_id;
209
212
215
218
223 };
224
225 const std::vector<ability_metadata>& abilities_metadata() const { return abilities_infos_; }
226
227 /** Some extra abilities that may be gained through AMLA advancements. */
228 const std::vector<ability_metadata>& adv_abilities_metadata() const { return adv_abilities_infos_; }
229
230 bool can_advance() const { return !advances_to_.empty(); }
231
232 bool musthave_status(const std::string& status) const;
233
234 bool has_zoc() const { return zoc_; }
235
236 bool has_ability_by_id(const std::string& ability) const;
237 std::vector<std::string> get_ability_id_list() const;
238
241
242 config abilities_cfg() const;
243
246
248 { return get_cfg().child_range("event"); }
249
250 /**
251 * The returned vector will not be empty, provided this has been built
252 * to the HELP_INDEXED status.
253 */
254 const std::vector<unit_race::GENDER>& genders() const { return genders_; }
255 bool has_gender_variation(const unit_race::GENDER gender) const;
256
257 std::vector<std::string> variations() const;
259
260 /**
261 * @param variation_id The id of the variation we search for.
262 * @return Whether one of the type's variations' (or the
263 * siblings' if the unit_type is a variation
264 * itself) id matches @a variation_id.
265 */
266 bool has_variation(const std::string& variation_id) const;
267
268 /**
269 * Whether the unit type has at least one help-visible variation.
270 */
271 bool show_variations_in_help() const;
272
273 /** Returns the ID of this type's race without the need to build the type. */
274 std::string race_id() const { return get_cfg()["race"]; } //race_->id(); }
275 /**
276 * Never returns nullptr, but may point to the null race.
277 * Requires building to the HELP_INDEXED status to get the correct race.
278 */
279 const unit_race* race() const { return race_; }
280 bool hide_help() const;
281 bool do_not_list() const { return do_not_list_; }
282
283 const config& get_cfg() const
284 {
285 if(built_cfg_) {
286 return *built_cfg_;
287 }
288 assert(cfg_);
289 return *cfg_;
290 }
291
292 /**
293 * Gets resistance while considering custom WML abilities.
294 * Attention: Filters in resistance-abilities will be ignored.
295 */
296 int resistance_against(const std::string& damage_name, bool attacker) const;
297
298 void apply_scenario_fix(const config& cfg);
300private:
301
302 /** Identical to unit::resistance_filter_matches. */
303 bool resistance_filter_matches(const config& cfg,bool attacker, const std::string& damage_name, int res) const;
304
305private:
307 if(!built_cfg_) {
308 built_cfg_ = std::make_unique<config>(*cfg_);
309 }
310 return *built_cfg_;
311 }
312 void fill_variations();
314 std::unique_ptr<unit_type> create_sub_type(const config& var_cfg, bool default_inherit);
315
316 const config* cfg_;
317 friend class unit_type_data;
318 mutable std::unique_ptr<config> built_cfg_;
320
321 std::string id_;
322 /** A suffix for id_, used when logging messages. */
323 std::string debug_id_;
324 /** The id of the top ancestor of this unit_type. */
325 std::string parent_id_;
326 /** from [base_unit] */
327 std::string base_unit_id_;
330 std::vector<t_string> special_notes_;
339 int cost_;
340 std::string usage_;
341 std::string undead_variation_;
342
343 std::string image_;
344 std::string icon_;
345 std::string small_profile_;
346 std::string profile_;
347 std::string flag_rgb_;
348
349 unsigned int num_traits_;
350
351 std::array<std::unique_ptr<unit_type>, 2> gender_types_;
352
355 std::string variation_id_;
357
358 /** Never nullptr, but may point to the null race. */
360
361 std::vector<ability_metadata> abilities_infos_;
362 std::vector<ability_metadata> adv_abilities_infos_;
363
365
367
368 std::vector<std::string> advances_to_;
371
372
373 unit_alignments::type alignment_;
374
375 std::string movement_type_id_;
377
379
380 std::vector<unit_race::GENDER> genders_;
381
382 // animations are loaded only after the first animations() call
383 mutable std::vector<unit_animation> animations_;
384
386};
387
389{
390public:
393
395
396 typedef std::map<std::string,unit_type> unit_type_map;
397
398 const unit_type_map& types() const { return types_; }
399 const std::vector<const unit_type*> types_list() const {
400 std::vector<const unit_type*> types_list;
401 for(const auto& i : types()) {
402 // Make sure this unit type is built with the data we need.
404 types_list.push_back(&i.second);
405 }
406 return types_list;
407 }
408 const race_map& races() const { return races_; }
410 const std::map<std::string, config>& abilities() const { return abilities_registry_; }
411 const std::map<std::string, config>& specials() const { return specials_registry_; }
412 config_array_view traits() const { return units_cfg().child_range("trait"); }
413
415 const config& base_cfg,
416 const std::string& registry_name,
417 const std::map<std::string, config>& registry
418 );
419
420 void set_config(const game_config_view& cfg);
421
422 /** Finds a unit_type by its id() and makes sure it is built to the specified level. */
423 const unit_type *find(const std::string& key, unit_type::BUILD_STATUS status = unit_type::FULL) const;
424 void check_types(const std::vector<std::string>& types) const;
425 const unit_race *find_race(const std::string&) const;
426
427 /** Makes sure the all unit_types are built to the specified level. */
429 /** Makes sure the provided unit_type is built to the specified level. */
430 void build_unit_type(const unit_type& ut, unit_type::BUILD_STATUS status) const;
431
432 /** Checks if the [hide_help] tag contains these IDs. */
433 bool hide_help(const std::string& type_id, const std::string& race_id) const;
434
435 void apply_scenario_fix(const config& cfg);
437private:
438 /** Parses the [hide_help] tag. */
439 void read_hide_help(const config& cfg);
440
441 void clear();
442
443 void apply_base_unit(unit_type& type, std::vector<std::string>& base_tree);
444
448
449 std::map<std::string, config> abilities_registry_;
450 std::map<std::string, config> specials_registry_;
451
452 /** True if [hide_help] contains a 'all=yes' at its root. */
454 // vectors containing the [hide_help] and its sub-tags [not]
455 std::vector<std::set<std::string>> hide_help_type_;
456 std::vector<std::set<std::string>> hide_help_race_;
457
458 const game_config_view& units_cfg() const { return units_cfg_; }
461};
462
464
465void adjust_profile(std::string& profile);
466
468 unit_experience_accelerator(int modifier);
470 static int get_acceleration();
471private:
473};
474
475/**
476 * Common logic for unit_type::special_notes() and unit::special_notes(). Adds
477 * any notes from the sources given as arguments, and filters out duplicates.
478 *
479 * @return the special notes for a unit or unit_type.
480 */
481std::vector<t_string> combine_special_notes(
482 const std::vector<t_string>& direct,
483 const config& abilities,
484 const const_attack_itors& attacks,
485 const movetype& mt);
std::vector< ability_ptr > ability_vector
Definition abilities.hpp:33
std::vector< attack_ptr > attack_list
boost::iterator_range< boost::indirect_iterator< attack_list::const_iterator > > const_attack_itors
A config object defines a single node in a WML file, with access to child nodes.
Definition config.hpp:157
child_itors child_range(std::string_view key)
Definition config.cpp:268
boost::iterator_range< const_child_iterator > const_child_itors
Definition config.hpp:281
A class grating read only view to a vector of config objects, viewed as one config with all children ...
config_array_view child_range(std::string_view key) const
The basic "size" of the unit - flying, small land, large land, etc.
Definition movetype.hpp:44
static config add_registry_entries(const config &base_cfg, const std::string &registry_name, const std::map< std::string, config > &registry)
Definition types.cpp:1041
std::map< std::string, config > specials_registry_
Definition types.hpp:450
void set_config(const game_config_view &cfg)
Resets all data based on the provided config.
Definition types.cpp:1067
const std::vector< const unit_type * > types_list() const
Definition types.hpp:399
unit_type::BUILD_STATUS build_status_
Definition types.hpp:460
std::map< std::string, unit_type > unit_type_map
Definition types.hpp:396
const unit_type * find(const std::string &key, unit_type::BUILD_STATUS status=unit_type::FULL) const
Finds a unit_type by its id() and makes sure it is built to the specified level.
Definition types.cpp:1253
bool hide_help(const std::string &type_id, const std::string &race_id) const
Checks if the [hide_help] tag contains these IDs.
Definition types.cpp:1342
std::map< std::string, config > abilities_registry_
Definition types.hpp:449
void remove_scenario_fixes()
Definition types.cpp:1462
bool hide_help_all_
True if [hide_help] contains a 'all=yes' at its root.
Definition types.hpp:453
race_map races_
Definition types.hpp:447
void build_all(unit_type::BUILD_STATUS status)
Makes sure the all unit_types are built to the specified level.
Definition types.cpp:1297
void apply_base_unit(unit_type &type, std::vector< std::string > &base_tree)
Modifies the provided config by merging all base units into it.
Definition types.cpp:937
const std::map< std::string, config > & abilities() const
Definition types.hpp:410
unit_type_data & operator=(const unit_type_data &)=delete
const race_map & races() const
Definition types.hpp:408
const game_config_view & units_cfg() const
Definition types.hpp:458
unit_type_map types_
Definition types.hpp:445
const unit_race * find_race(const std::string &) const
Definition types.cpp:1359
void check_types(const std::vector< std::string > &types) const
Definition types.cpp:1274
movement_type_map movement_types_
Definition types.hpp:446
const std::map< std::string, config > & specials() const
Definition types.hpp:411
game_config_view units_cfg_
Definition types.hpp:459
void build_unit_type(const unit_type &ut, unit_type::BUILD_STATUS status) const
Makes sure the provided unit_type is built to the specified level.
Definition types.cpp:1245
const movement_type_map & movement_types() const
Definition types.hpp:409
void read_hide_help(const config &cfg)
Parses the [hide_help] tag.
Definition types.cpp:1313
const unit_type_map & types() const
Definition types.hpp:398
std::vector< std::set< std::string > > hide_help_type_
Definition types.hpp:455
std::vector< std::set< std::string > > hide_help_race_
Definition types.hpp:456
void apply_scenario_fix(const config &cfg)
Definition types.cpp:1427
unit_type_data(const unit_type_data &)=delete
config_array_view traits() const
Definition types.hpp:412
A single unit type that the player may recruit.
Definition types.hpp:43
std::string default_variation_
Definition types.hpp:354
t_string description_
Definition types.hpp:329
std::string image_
Definition types.hpp:343
bool can_advance() const
Definition types.hpp:230
std::vector< unit_animation > animations_
Definition types.hpp:383
const std::vector< std::string > advances_from() const
A vector of unit_type ids that can advance to this unit_type.
Definition types.cpp:610
unit_alignments::type alignment_
Definition types.hpp:373
std::vector< t_string > direct_special_notes() const
Returns only the notes defined by [unit_type][special_note] tags, excluding any that would be found f...
Definition types.hpp:159
int jamming_
Definition types.hpp:337
std::string race_id() const
Returns the ID of this type's race without the need to build the type.
Definition types.hpp:274
int recall_cost_
Definition types.hpp:334
int cost_
Definition types.hpp:339
config & writable_cfg()
Definition types.hpp:306
const std::string & big_profile() const
Definition types.hpp:183
config::const_child_itors advancements_
Definition types.hpp:369
void fill_variations()
Processes [variation] tags of ut_cfg, handling inheritance and child clearing.
Definition types.cpp:993
static std::string alignment_description(unit_alignments::type align, unit_race::GENDER gender=unit_race::MALE)
Implementation detail of unit_type::alignment_description.
Definition types.cpp:779
std::vector< t_string > special_notes_
Definition types.hpp:330
const std::string & default_variation() const
Definition types.hpp:177
const std::string & image() const
Definition types.hpp:180
const std::vector< ability_metadata > & adv_abilities_metadata() const
Some extra abilities that may be gained through AMLA advancements.
Definition types.hpp:228
const unit_type & get_gender_unit_type(const std::string &gender) const
Returns a gendered variant of this unit_type.
Definition types.cpp:416
std::vector< std::string > get_ability_id_list() const
Definition types.cpp:564
config::const_child_itors advancements() const
Definition types.hpp:244
const unit_race * race() const
Never returns nullptr, but may point to the null race.
Definition types.hpp:279
const std::string & undead_variation() const
Info on the type of unit that the unit reanimates as.
Definition types.hpp:137
variations_map variations_
Definition types.hpp:353
void build_full(const movement_type_map &movement_types, const race_map &races, const config_array_view &traits)
Load data into an empty unit_type (build to FULL).
Definition types.cpp:146
int level_
Definition types.hpp:333
const unit_race * race_
Never nullptr, but may point to the null race.
Definition types.hpp:359
std::string parent_id_
The id of the top ancestor of this unit_type.
Definition types.hpp:325
ability_vector abilities_
Definition types.hpp:364
std::string flag_rgb_
Definition types.hpp:347
std::string undead_variation_
Definition types.hpp:341
std::string movement_type_id_
Definition types.hpp:375
void fill_variations_and_gender()
Definition types.cpp:1022
std::string halo() const
Definition types.hpp:184
std::vector< ability_metadata > adv_abilities_infos_
Definition types.hpp:362
bool show_variations_in_help() const
Whether the unit type has at least one help-visible variation.
Definition types.cpp:703
const variations_map & variation_types() const
Definition types.hpp:258
int hitpoints() const
Definition types.hpp:165
int max_attacks_
Definition types.hpp:338
std::map< std::string, unit_type > variations_map
Definition types.hpp:97
std::string debug_id_
A suffix for id_, used when logging messages.
Definition types.hpp:323
std::array< std::unique_ptr< unit_type >, 2 > gender_types_
Definition types.hpp:351
double xp_bar_scaling() const
Definition types.hpp:167
bool has_ability_by_id(const std::string &ability) const
Definition types.cpp:553
const std::vector< ability_metadata > & abilities_metadata() const
Definition types.hpp:225
std::string small_profile_
Definition types.hpp:345
t_string variation_name_
Definition types.hpp:356
const std::string & variation_id() const
The id of this variation; empty if it's a gender variation or a base unit.
Definition types.hpp:151
const unit_type & get_variation(const std::string &id) const
Definition types.cpp:437
const_attack_itors attacks() const
Definition types.cpp:505
config::const_child_itors events() const
Definition types.hpp:247
unit_type(unit_type &&) noexcept=default
const std::string & usage() const
Definition types.hpp:179
const std::string & small_profile() const
Definition types.hpp:182
void apply_scenario_fix(const config &cfg)
Definition types.cpp:1365
int vision_
Definition types.hpp:336
void build(BUILD_STATUS status, const movement_type_map &movement_types, const race_map &races, const config_array_view &traits) const
Performs a build of this to the indicated stage.
Definition types.hpp:106
int resistance_against(const std::string &damage_name, bool attacker) const
Gets resistance while considering custom WML abilities.
Definition types.cpp:714
bool has_variation(const std::string &variation_id) const
Definition types.cpp:698
bool has_gender_variation(const unit_race::GENDER gender) const
Definition types.cpp:681
bool hide_help_
Definition types.hpp:366
const t_string & variation_name() const
Definition types.hpp:178
bool do_not_list() const
Definition types.hpp:281
std::string ellipse() const
Definition types.hpp:186
int movement() const
Definition types.hpp:170
t_string unit_description() const
Definition types.cpp:447
const config & get_cfg() const
Definition types.hpp:283
static void check_id(std::string &id)
Validate the id argument.
Definition types.cpp:1469
BUILD_STATUS
Records the status of the lazy building of unit types.
Definition types.hpp:77
@ CREATED
Definition types.hpp:77
@ NOT_BUILT
Definition types.hpp:77
@ HELP_INDEXED
Definition types.hpp:77
@ VARIATIONS
Definition types.hpp:77
const std::string & parent_id() const
The id of the original type from which this (variation) descended.
Definition types.hpp:149
std::string id_
Definition types.hpp:321
std::string usage_
Definition types.hpp:340
const std::vector< unit_animation > & animations() const
Definition types.cpp:496
int max_attacks() const
Definition types.hpp:175
std::vector< std::string > variations() const
Definition types.cpp:686
bool hide_help() const
Definition types.cpp:582
const std::string & flag_rgb() const
Definition types.cpp:676
const t_string & type_name() const
The name of the unit in the current language setting.
Definition types.hpp:142
std::vector< ability_metadata > abilities_infos_
Definition types.hpp:361
int vision() const
Definition types.hpp:171
std::string variation_id_
Definition types.hpp:355
std::vector< t_string > special_notes() const
Returns all notes that should be displayed in the help page for this type, including those found in a...
Definition types.cpp:456
attack_list attacks_cache_
Definition types.hpp:319
config::const_child_itors modification_advancements() const
Returns two iterators pointing to a range of AMLA configs.
Definition types.hpp:124
int cost() const
Definition types.hpp:176
double xp_bar_scaling_
Definition types.hpp:332
std::vector< std::string > advances_to_
Definition types.hpp:368
const config * cfg_
Definition types.hpp:316
std::string base_unit_id_
from [base_unit]
Definition types.hpp:327
double hp_bar_scaling_
Definition types.hpp:332
config possible_traits_
Definition types.hpp:378
const std::string log_id() const
A variant on id() that is more descriptive, for use with message logging.
Definition types.hpp:147
int vision(bool base_value) const
If base_value is set to true, do not fall back to movement().
Definition types.hpp:173
std::vector< unit_race::GENDER > genders_
Definition types.hpp:380
const std::vector< std::string > & advances_to() const
A vector of unit_type ids that this unit_type can advance to.
Definition types.hpp:119
const ability_vector & abilities() const
Definition types.hpp:117
bool zoc_
Definition types.hpp:366
int experience_needed(bool with_acceleration=true) const
Definition types.cpp:539
bool generate_name() const
Definition types.hpp:187
bool musthave_status(const std::string &status) const
Definition types.cpp:630
double hp_bar_scaling() const
Definition types.hpp:166
int experience_needed_
Definition types.hpp:370
unit_type & operator=(const unit_type &)=delete
movetype movement_type_
Definition types.hpp:376
std::string icon_
Definition types.hpp:344
int hitpoints_
Definition types.hpp:331
const std::string movement_type_id() const
Definition types.hpp:193
bool do_not_list_
Definition types.hpp:366
void build(BUILD_STATUS status, const movement_type_map &movement_types, const race_map &races, const config_array_view &traits)
Performs a build of this to the indicated stage.
Definition types.cpp:381
const std::string & icon() const
Definition types.hpp:181
config abilities_cfg() const
Definition types.cpp:578
bool resistance_filter_matches(const config &cfg, bool attacker, const std::string &damage_name, int res) const
Identical to unit::resistance_filter_matches.
Definition types.cpp:746
const std::vector< unit_race::GENDER > & genders() const
The returned vector will not be empty, provided this has been built to the HELP_INDEXED status.
Definition types.hpp:254
void remove_scenario_fixes()
Definition types.cpp:1439
std::unique_ptr< unit_type > create_sub_type(const config &var_cfg, bool default_inherit)
Handles inheritance for configs of [male], [female], and [variation].
Definition types.cpp:976
void build_help_index(const movement_type_map &movement_types, const race_map &races, const config_array_view &traits)
Partially load data into an empty unit_type (build to HELP_INDEXED).
Definition types.cpp:189
BUILD_STATUS build_status_
Definition types.hpp:385
config::const_child_itors possible_traits() const
Definition types.hpp:239
void build_created()
Load the most needed data into an empty unit_type (build to CREATE).
Definition types.cpp:338
int level() const
Definition types.hpp:168
std::unique_ptr< config > built_cfg_
Definition types.hpp:318
bool has_zoc() const
Definition types.hpp:234
unit_alignments::type alignment() const
Definition types.hpp:198
t_string type_name_
Definition types.hpp:328
const std::string & id() const
The id for this unit_type.
Definition types.hpp:145
unit_type(const unit_type &)=delete
int movement_
Definition types.hpp:335
unsigned int num_traits() const
Definition types.hpp:139
unsigned int num_traits_
Definition types.hpp:349
std::set< std::string > advancement_tree() const
Get the advancement tree.
Definition types.cpp:603
std::string profile_
Definition types.hpp:346
const movetype & movement_type() const
Definition types.hpp:194
int recall_cost() const
Definition types.hpp:169
std::string footprints() const
Definition types.hpp:185
int jamming() const
Definition types.hpp:174
const config * cfg
std::vector< std::reference_wrapper< const config > > config_array_view
std::map< std::string, unit_race > race_map
Definition race.hpp:106
static int get_acceleration()
Definition types.cpp:534
unit_type_data unit_types
Definition types.cpp:1499
std::vector< t_string > combine_special_notes(const std::vector< t_string > &direct, const config &abilities, const const_attack_itors &attacks, const movetype &mt)
Common logic for unit_type::special_notes() and unit::special_notes().
Definition types.cpp:469
std::map< std::string, movetype > movement_type_map
Definition types.hpp:35
void adjust_profile(std::string &profile)
Definition types.cpp:1501
#define i