The Battle for Wesnoth  1.19.26+dev
team.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 "color_range.hpp"
19 #include "config.hpp"
20 #include "defeat_condition.hpp"
21 #include "game_events/fwd.hpp"
22 #include "map/location.hpp"
23 #include "recall_list_manager.hpp"
24 #include "side_controller.hpp"
26 #include "team_shared_vision.hpp"
27 
28 #include <chrono>
29 #include <set>
30 
31 #include <boost/dynamic_bitset.hpp>
32 
33 class game_data;
34 class gamemap;
35 struct color_t;
36 
37 
38 namespace wb {
39  class side_actions;
40 }
41 
42 class shroud_map {
43 public:
44  shroud_map() : enabled_(false), data_() {}
45 
46  void place(int x, int y);
47  bool clear(int x, int y);
48  void reset();
49 
50  bool value(int x, int y) const;
51  bool shared_value(const std::vector<const shroud_map*>& maps, int x, int y) const;
52 
53  bool copy_from(const std::vector<const shroud_map*>& maps);
54 
55  std::string write() const;
56  void read(const std::string& shroud_data);
57  void merge(const std::string& shroud_data);
58 
59  bool enabled() const { return enabled_; }
60  void set_enabled(bool enabled) { enabled_ = enabled; }
61 
62  int width() const;
63  int height() const;
64 private:
65  bool enabled_;
66  std::vector<std::vector<bool>> data_;
67 };
68 
69 /**
70  * This class stores all the data for a single 'side' (in game nomenclature).
71  * E.g., there is only one leader unit per team.
72  */
73 class team
74 {
75 private:
76  struct team_info
77  {
78  team_info();
79  void read(const config &cfg);
80  void write(config& cfg) const;
81  int gold;
83  int income;
86  mutable int minimum_recruit_price;
88  std::set<std::string> can_recruit;
89  std::string team_name;
92  std::string faction;
94  std::string save_id;
95  // 'id' of the current player (not necessarily unique)
96  std::string current_player;
97  std::string countdown_time;
99 
100  std::string flag;
101  std::string flag_icon;
102 
103  std::string id;
104 
106 
107  t_string objectives; /** < Team's objectives for the current level. */
108 
109  /** Set to true when the objectives for this time changes.
110  * Reset to false when the objectives for this team have been
111  * displayed to the user. */
112  mutable bool objectives_changed;
113 
115  bool is_local;
117 
118  side_proxy_controller::type proxy_controller; // when controller == HUMAN, the proxy controller determines what input method is actually used.
119  // proxy controller is an interface property, not gamestate. it is not synced, not known to server.
120  // also not saved in save game file
125  bool no_leader;
126  bool hidden;
127  bool no_turn_confirmation; // Can suppress confirmations when ending a turn.
128 
129  std::string color;
130 
131  int side;
133  bool lost;
134 
137  // TODO: maybe make this integer percentage? I like the float version more but this might cause OOS error because of floating point rounding differences on different hardware.
142  };
143 
144  static const int default_team_gold_;
145 
146 public:
147  team();
148  virtual ~team();
149 
150  team(team&&) noexcept = default;
151  team& operator=(team&&) noexcept = default;
152 
153  /**
154  * Stores the attributes recognized by [side]. These should be stripped
155  * from a side's config before using it to create the side's leader.
156  */
157  static const std::set<std::string> attributes;
158  /**
159  * Stores the child tags recognized by [side]. These should be stripped
160  * from a side's config before using it to create the side's leader.
161  */
162  static const std::set<std::string> tags;
163 
164  void build(const config &cfg, const gamemap &map);
165 
166  void write(config& cfg) const;
167 
168  void fix_villages(const gamemap &map);
169  /**
170  * Acquires a village from owner_side.
171  * Pointer fire_event should be the game_data for the game if it is desired to fire an event -- a "capture" event with owner_side variable scoped in will be fired.
172  * For no event, pass it nullptr.
173  * Default is the resources::gamedata pointer.
174  */
175  game_events::pump_result_t get_village(const map_location&, const int owner_side, game_data * fire_event);
176  void lose_village(const map_location&);
177  void clear_villages() { villages_.clear(); }
178  const std::set<map_location>& villages() const { return villages_; }
179  bool owns_village(const map_location& loc) const
180  { return villages_.count(loc) > 0; }
181 
182  int side() const { return info_.side; }
183  int gold() const { return info_.gold; }
184  int start_gold() const { return info_.start_gold; }
185 
186  /**
187  * @return The income for this side exactly as defined in the [side] tag.
188  */
189  int raw_income() const { return info_.income; }
190 
191  /**
192  * @return The income for this side as defined in the [side] tag
193  * with base income from [game_config] added.
194  */
195  int base_income() const;
196 
197  int village_gold() const { return info_.income_per_village; }
198  int recall_cost() const { return info_.recall_cost; }
199  void set_village_gold(int income) { info_.income_per_village = income; }
200  void set_recall_cost(int cost) { info_.recall_cost = cost; }
201  int total_income() const { return base_income() + static_cast<int>(villages_.size()) * info_.income_per_village; }
202 
203  /**
204  * @return The number of unit levels each village can support,
205  * i.e. how much upkeep each village can bear.
206  */
207  int village_support() const { return info_.support_per_village; }
208 
209  /**
210  * @param support The number of unit levels each village can support
211  */
213 
214  /**
215  * @return Calculated total support capacity, based on support_per_village.
216  */
217  int support() const { return static_cast<int>(villages_.size()) * village_support(); }
218  void new_turn() { info_.gold += total_income(); }
219  void set_gold(int amount) { info_.gold = amount; }
220  void set_start_gold(const int amount) { info_.start_gold = amount; }
221  void spend_gold(const int amount) { info_.gold -= amount; }
222 
223  /**
224  * Sets the income of this side to the given value.
225  * Base income from `[game_config]` is not added.
226  * @param amount The income amount
227  */
228  void set_raw_income(int amount) { info_.income = amount; }
229 
230  /**
231  * Sets the income of this side to the given value with
232  * base income from `[game_config]` added to it.
233  * @param amount The income amount
234  */
235  void set_base_income(int amount);
236  std::chrono::milliseconds countdown_time() const { return countdown_time_; }
237  void set_countdown_time(const std::chrono::milliseconds& amount) const { countdown_time_ = amount; }
238  int action_bonus_count() const { return action_bonus_count_; }
239  void set_action_bonus_count(const int count) { action_bonus_count_ = count; }
243  const recall_list_manager & recall_list() const {return recall_list_;}
244  void set_current_player(const std::string& player)
245  { info_.current_player = player; }
246 
249 
250  const std::set<std::string>& recruits() const
251  { return info_.can_recruit; }
252  void add_recruit(const std::string &);
253  void set_recruits(const std::set<std::string>& recruits);
254  int minimum_recruit_price() const;
255  const std::string& last_recruit() const { return last_recruit_; }
256  void set_last_recruit(const std::string & u_type) { last_recruit_ = u_type; }
257 
258  const std::string& save_id() const { return info_.save_id; }
259  std::string save_id_or_number() const { return info_.save_id.empty() ? std::to_string(info_.side) : info_.save_id; }
260  void set_save_id(const std::string& save_id) { info_.save_id = save_id; }
261  const std::string& current_player() const { return info_.current_player; }
262 
263  void set_objectives(const t_string& new_objectives, bool silently=false);
264  void set_objectives_changed(bool c = true) const { info_.objectives_changed = c; }
266 
267  const t_string& objectives() const { return info_.objectives; }
268  bool objectives_changed() const { return info_.objectives_changed; }
269 
270  bool is_enemy(int n) const {
271  const std::size_t index = std::size_t(n-1);
272  if(index >= enemies_.size()) {
274  }
275  if(index < enemies_.size()) {
276  return enemies_[index];
277  } else {
278  return false;
279  }
280  }
281 
283  const std::string& color() const { return info_.color; }
284  /** @note Call display::reinit_flag_for_side() after calling this */
285  void set_color(const std::string& color) { info_.color = color; }
286  bool is_empty() const { return info_.controller == side_controller::type::none; }
287 
288  bool is_local() const { return !is_empty() && info_.is_local; }
289  bool is_network() const { return !is_empty() && !info_.is_local; }
290 
291  bool is_human() const { return info_.controller == side_controller::type::human; }
292  bool is_ai() const { return info_.controller == side_controller::type::ai; }
293 
294  bool is_local_human() const { return is_human() && is_local(); }
295  bool is_local_ai() const { return is_ai() && is_local(); }
296  bool is_network_human() const { return is_human() && is_network(); }
297  bool is_network_ai() const { return is_ai() && is_network(); }
298 
299  void set_local(bool local) { info_.is_local = local; }
300  void make_human() { info_.controller = side_controller::type::human; }
301  void make_ai() { info_.controller = side_controller::type::ai; }
302  void change_controller(const std::string& new_controller) {
303  info_.controller = side_controller::get_enum(new_controller).value_or(side_controller::type::ai);
304  }
306  void change_controller_by_wml(const std::string& new_controller);
307 
309  bool is_proxy_human() const { return info_.proxy_controller == side_proxy_controller::type::human; }
310  bool is_droid() const { return info_.proxy_controller == side_proxy_controller::type::ai; }
311  bool is_idle() const { return info_.proxy_controller == side_proxy_controller::type::idle; }
312 
313  void make_droid() { info_.proxy_controller = side_proxy_controller::type::ai; }
314  void make_idle() { info_.proxy_controller = side_proxy_controller::type::idle; }
315  void make_proxy_human() { info_.proxy_controller = side_proxy_controller::type::human; }
317 
319 
320  void toggle_droid() { info_.proxy_controller = (info_.proxy_controller == side_proxy_controller::type::ai ) ? side_proxy_controller::type::human : side_proxy_controller::type::ai; }
321  void toggle_idle() { info_.proxy_controller = (info_.proxy_controller == side_proxy_controller::type::idle) ? side_proxy_controller::type::human : side_proxy_controller::type::idle; }
322 
323  const std::string& team_name() const { return info_.team_name; }
324  const t_string &user_team_name() const { return info_.user_team_name; }
325  void change_team(const std::string &name, const t_string &user_name);
326 
327  const std::string& flag() const { return info_.flag; }
328  const std::string& flag_icon() const { return info_.flag_icon; }
329 
330  /** @note Call display::reinit_flag_for_side() after calling this */
331  void set_flag(const std::string& flag) { info_.flag = flag; }
332  void set_flag_icon(const std::string& flag_icon) { info_.flag_icon = flag_icon; }
333 
334  const std::string& side_name() const { return info_.side_name.empty() ? info_.current_player : info_.side_name.str(); }
336  void set_side_name(const t_string& new_name) {info_.side_name = new_name == info_.current_player ? "" : new_name;}
337  const std::string& faction() const { return info_.faction; }
338  const t_string& faction_name() const { return info_.faction_name; }
339  //Returns true if the hex is shrouded/fogged for this side, or
340  //any other ally with shared vision.
341  bool shrouded(const map_location& loc) const;
342  bool fogged(const map_location& loc) const;
343 
344  bool uses_shroud() const { return shroud_.enabled(); }
345  bool uses_fog() const { return fog_.enabled(); }
346  bool fog_or_shroud() const { return uses_shroud() || uses_fog(); }
347  bool clear_shroud(const map_location& loc) { return shroud_.clear(loc.wml_x(),loc.wml_y()); }
349  bool clear_fog(const map_location& loc) { return fog_.clear(loc.wml_x(),loc.wml_y()); }
350  void reshroud() { shroud_.reset(); }
351  void refog() { fog_.reset(); }
352  void set_shroud(bool shroud) { shroud_.set_enabled(shroud); }
353  void set_fog(bool fog) { fog_.set_enabled(fog); }
354  std::string shroud_data() const { return shroud_.write(); }
355 
356  /** Merge a WML shroud map with the shroud data of this player. */
358 
359  /** Whether @a other's count of villages, units, upkeep and income should be visible in the status table. */
360  bool knows_upkeep(const team &other) const;
361  /** Records hexes that were cleared of fog via WML. */
362  void add_fog_override(const std::set<map_location> &hexes) { fog_clearer_.insert(hexes.begin(), hexes.end()); }
363  /** Removes the record of hexes that were cleared of fog via WML. */
364  void remove_fog_override(const std::set<map_location> &hexes);
365 
366  bool auto_shroud_updates() const { return auto_shroud_updates_; }
369  bool no_leader() const { return info_.no_leader; }
372  /** sets the defeat condition if @param value is a valid defeat condition, otherwise nothing happes. */
374  void have_leader(bool value=true) { info_.no_leader = !value; }
375  bool hidden() const { return info_.hidden; }
377  bool persistent() const { return info_.persistent; }
379  void set_lost(bool value=true) { info_.lost = value; }
380  bool lost() const { return info_.lost; }
381 
385  bool carryover_add() const { return info_.carryover_add; }
387  double carryover_bonus() const { return info_.carryover_bonus; }
389  int carryover_gold() const { return info_.carryover_gold; }
391  const config& variables() const { return info_.variables; }
392 
395 
396  //function which, when given a 1-based side will return the color used by that side.
398 
399  static color_t get_side_color(int side);
400  static color_t get_minimap_color(int side);
401 
402  static std::string get_side_color_id(unsigned side);
403  static t_string get_side_color_name_for_UI(unsigned side);
404  static std::string get_side_color_id_from_config(const config& cfg);
405 
406  void log_recruitable() const;
407 
408  /** clear the shroud, fog, and enemies cache for all teams*/
409  static void clear_caches();
410 
411  /** get the whiteboard planned actions for this team */
412  std::shared_ptr<wb::side_actions> get_side_actions() const { return planned_actions_; }
413 
414  config to_config() const;
415 
416  bool share_maps() const { return info_.share_vision != team_shared_vision::type::none ; }
417  bool share_view() const { return info_.share_vision == team_shared_vision::type::all; }
419 
420  void set_share_vision(const std::string& vision_status) {
421  info_.share_vision = team_shared_vision::get_enum(vision_status).value_or(team_shared_vision::type::all);
422  clear_caches();
423  }
424 
426  info_.share_vision = vision_status;
427  clear_caches();
428  }
429 
431  {
433  }
434  std::string allied_human_teams() const;
435 
436  bool chose_random() const
437  {
438  return info_.chose_random;
439  }
440 
441 private:
442 
443  const std::vector<const shroud_map*>& ally_shroud(const std::vector<team>& teams) const;
444  const std::vector<const shroud_map*>& ally_fog(const std::vector<team>& teams) const;
445 
446  std::set<map_location> villages_;
447 
449  /** Stores hexes that have been cleared of fog via WML. */
450  std::set<map_location> fog_clearer_;
451 
453 
455 
456  mutable std::chrono::milliseconds countdown_time_;
458 
460  std::string last_recruit_;
461 
462 private:
463  void calculate_enemies(std::size_t index) const;
464  bool calculate_is_enemy(std::size_t index) const;
465  mutable boost::dynamic_bitset<> enemies_;
466 
467  mutable std::vector<const shroud_map*> ally_shroud_, ally_fog_;
468 
469  /**
470  * Whiteboard planned actions for this team.
471  */
472  std::shared_ptr<wb::side_actions> planned_actions_;
473 };
474 
475 //function which will validate a side. Throws game::game_error
476 //if the side is invalid
477 void validate_side(int side); //throw game::game_error
map_location loc
Definition: move.cpp:172
A color range definition is made of four reference RGB colors, used for calculating conversions from ...
Definition: color_range.hpp:43
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:157
Encapsulates the map of the game.
Definition: map.hpp:176
This class encapsulates the recall list of a team.
bool copy_from(const std::vector< const shroud_map * > &maps)
Definition: team.cpp:906
int height() const
Definition: team.cpp:756
void read(const std::string &shroud_data)
Definition: team.cpp:871
void set_enabled(bool enabled)
Definition: team.hpp:60
shroud_map()
Definition: team.hpp:44
bool enabled() const
Definition: team.hpp:59
std::vector< std::vector< bool > > data_
Definition: team.hpp:66
void place(int x, int y)
Definition: team.cpp:786
int width() const
Definition: team.cpp:751
bool shared_value(const std::vector< const shroud_map * > &maps, int x, int y) const
Definition: team.cpp:834
void merge(const std::string &shroud_data)
Definition: team.cpp:890
bool value(int x, int y) const
Definition: team.cpp:814
std::string write() const
Definition: team.cpp:855
void reset()
Definition: team.cpp:803
bool enabled_
Definition: team.hpp:65
bool clear(int x, int y)
Definition: team.cpp:764
bool empty() const
Definition: tstring.hpp:200
const std::string & str() const
Definition: tstring.hpp:204
This class stores all the data for a single 'side' (in game nomenclature).
Definition: team.hpp:74
bool uses_shroud() const
Definition: team.hpp:344
void set_action_bonus_count(const int count)
Definition: team.hpp:239
int carryover_gold() const
Definition: team.hpp:389
const std::string & color() const
Definition: team.hpp:283
bool clear_shroud(const map_location &loc)
Definition: team.hpp:347
void have_leader(bool value=true)
Definition: team.hpp:374
bool is_ai() const
Definition: team.hpp:292
static color_t get_minimap_color(int side)
Definition: team.cpp:948
void build(const config &cfg, const gamemap &map)
Definition: team.cpp:344
bool no_turn_confirmation() const
Definition: team.hpp:393
void set_carryover_percentage(int value)
Definition: team.hpp:382
void fix_villages(const gamemap &map)
Definition: team.cpp:413
bool is_proxy_human() const
Definition: team.hpp:309
config & variables()
Definition: team.hpp:390
const std::string & side_name() const
Definition: team.hpp:334
recall_list_manager recall_list_
Definition: team.hpp:459
int side() const
Definition: team.hpp:182
game_events::pump_result_t get_village(const map_location &, const int owner_side, game_data *fire_event)
Acquires a village from owner_side.
Definition: team.cpp:424
bool is_human() const
Definition: team.hpp:291
void set_countdown_time(const std::chrono::milliseconds &amount) const
Definition: team.hpp:237
void set_flag_icon(const std::string &flag_icon)
Definition: team.hpp:332
void set_scroll_to_leader(bool value)
Definition: team.hpp:248
int support() const
Definition: team.hpp:217
const std::string & faction() const
Definition: team.hpp:337
int village_support() const
Definition: team.hpp:207
std::vector< const shroud_map * > ally_shroud_
Definition: team.hpp:467
int recall_cost() const
Definition: team.hpp:198
void set_objectives_changed(bool c=true) const
Definition: team.hpp:264
void set_shroud(bool shroud)
Definition: team.hpp:352
bool is_droid() const
Definition: team.hpp:310
bool fog_or_shroud() const
Definition: team.hpp:346
void change_proxy(side_proxy_controller::type proxy)
Definition: team.hpp:318
bool auto_shroud_updates() const
Definition: team.hpp:366
void set_local(bool local)
Definition: team.hpp:299
const std::string & current_player() const
Definition: team.hpp:261
void set_recruits(const std::set< std::string > &recruits)
Definition: team.cpp:457
const std::string & team_name() const
Definition: team.hpp:323
bool objectives_changed() const
Definition: team.hpp:268
void set_carryover_gold(int value)
Definition: team.hpp:388
void decrement_action_bonus_count()
Definition: team.hpp:241
bool is_local() const
Definition: team.hpp:288
void set_carryover_bonus(double value)
Definition: team.hpp:386
static std::string get_side_color_id_from_config(const config &cfg)
Definition: team.cpp:994
bool is_local_human() const
Definition: team.hpp:294
std::chrono::milliseconds countdown_time_
Definition: team.hpp:456
void merge_shroud_map_data(const std::string &shroud_data)
Merge a WML shroud map with the shroud data of this player.
Definition: team.hpp:357
bool no_leader() const
Definition: team.hpp:369
void toggle_idle()
Definition: team.hpp:321
void refog()
Definition: team.hpp:351
bool clear_fog(const map_location &loc)
Definition: team.hpp:349
int village_gold() const
Definition: team.hpp:197
bool is_enemy(int n) const
Definition: team.hpp:270
config to_config() const
Definition: team.cpp:1024
team_shared_vision::type share_vision() const
Definition: team.hpp:418
void set_auto_shroud_updates(bool value)
Definition: team.hpp:367
int action_bonus_count() const
Definition: team.hpp:238
shroud_map fog_
Definition: team.hpp:448
bool owns_village(const map_location &loc) const
Definition: team.hpp:179
bool calculate_is_enemy(std::size_t index) const
Definition: team.cpp:505
const std::set< map_location > & villages() const
Definition: team.hpp:178
const recall_list_manager & recall_list() const
Definition: team.hpp:243
void set_current_player(const std::string &player)
Definition: team.hpp:244
void change_controller(side_controller::type controller)
Definition: team.hpp:305
const t_string & objectives() const
Definition: team.hpp:267
void change_team(const std::string &name, const t_string &user_name)
Definition: team.cpp:602
int gold() const
Definition: team.hpp:183
void set_last_recruit(const std::string &u_type)
Definition: team.hpp:256
static color_range get_side_color_range(int side)
Definition: team.cpp:931
team()
Definition: team.cpp:322
const t_string & faction_name() const
Definition: team.hpp:338
defeat_condition::type defeat_cond() const
Definition: team.hpp:370
void set_objectives(const t_string &new_objectives, bool silently=false)
Definition: team.cpp:627
t_string side_name_tstr() const
Definition: team.hpp:335
bool carryover_add() const
Definition: team.hpp:385
std::string shroud_data() const
Definition: team.hpp:354
static const std::set< std::string > tags
Stores the child tags recognized by [side].
Definition: team.hpp:162
static t_string get_side_color_name_for_UI(unsigned side)
Definition: team.cpp:982
void clear_proxy()
Definition: team.hpp:316
void handle_legacy_share_vision(const config &cfg)
Definition: team.hpp:430
int carryover_percentage() const
Definition: team.hpp:383
void write(config &cfg) const
Definition: team.cpp:382
static std::string get_side_color_id(unsigned side)
Definition: team.cpp:955
bool is_network_ai() const
Definition: team.hpp:297
int raw_income() const
Definition: team.hpp:189
bool is_network() const
Definition: team.hpp:289
std::vector< const shroud_map * > ally_fog_
Definition: team.hpp:467
int total_income() const
Definition: team.hpp:201
void set_persistent(bool value)
Definition: team.hpp:378
void reset_objectives_changed() const
Definition: team.hpp:265
void set_recall_cost(int cost)
Definition: team.hpp:200
void set_side_name(const t_string &new_name)
Definition: team.hpp:336
void set_start_gold(const int amount)
Definition: team.hpp:220
team_info info_
Definition: team.hpp:454
team(team &&) noexcept=default
void reshroud()
Definition: team.hpp:350
const std::string & save_id() const
Definition: team.hpp:258
static const int default_team_gold_
Definition: team.hpp:144
void set_carryover_add(bool value)
Definition: team.hpp:384
bool is_local_ai() const
Definition: team.hpp:295
void calculate_enemies(std::size_t index) const
Definition: team.cpp:494
void add_recruit(const std::string &)
Definition: team.cpp:467
side_controller::type controller() const
Definition: team.hpp:282
bool is_idle() const
Definition: team.hpp:311
int minimum_recruit_price() const
Definition: team.cpp:474
double carryover_bonus() const
Definition: team.hpp:387
void make_droid()
Definition: team.hpp:313
void change_controller(const std::string &new_controller)
Definition: team.hpp:302
void make_ai()
Definition: team.hpp:301
void add_fog_override(const std::set< map_location > &hexes)
Records hexes that were cleared of fog via WML.
Definition: team.hpp:362
virtual ~team()
Definition: team.cpp:340
static void clear_caches()
clear the shroud, fog, and enemies cache for all teams
Definition: team.cpp:615
std::shared_ptr< wb::side_actions > get_side_actions() const
get the whiteboard planned actions for this team
Definition: team.hpp:412
bool auto_shroud_updates_
Definition: team.hpp:452
bool share_maps() const
Definition: team.hpp:416
void set_raw_income(int amount)
Sets the income of this side to the given value.
Definition: team.hpp:228
void set_defeat_condition(defeat_condition::type value)
Definition: team.hpp:371
std::set< map_location > fog_clearer_
Stores hexes that have been cleared of fog via WML.
Definition: team.hpp:450
bool is_network_human() const
Definition: team.hpp:296
std::string allied_human_teams() const
Definition: team.cpp:1032
int action_bonus_count_
Definition: team.hpp:457
bool shrouded(const map_location &loc) const
Definition: team.cpp:636
void set_fog(bool fog)
Definition: team.hpp:353
const config & variables() const
Definition: team.hpp:391
std::set< map_location > villages_
Definition: team.hpp:446
bool knows_upkeep(const team &other) const
Whether other's count of villages, units, upkeep and income should be visible in the status table.
Definition: team.cpp:689
void set_color(const std::string &color)
Definition: team.hpp:285
void make_proxy_human()
Definition: team.hpp:315
std::chrono::milliseconds countdown_time() const
Definition: team.hpp:236
int start_gold() const
Definition: team.hpp:184
const std::string & flag_icon() const
Definition: team.hpp:328
shroud_map shroud_
Definition: team.hpp:448
void make_human()
Definition: team.hpp:300
std::string save_id_or_number() const
Definition: team.hpp:259
void spend_gold(const int amount)
Definition: team.hpp:221
const std::vector< const shroud_map * > & ally_fog(const std::vector< team > &teams) const
Definition: team.cpp:676
void clear_villages()
Definition: team.hpp:177
bool get_scroll_to_leader() const
Definition: team.hpp:247
side_proxy_controller::type proxy_controller() const
Definition: team.hpp:308
int base_income() const
Definition: team.cpp:403
bool uses_fog() const
Definition: team.hpp:345
static color_t get_side_color(int side)
Definition: team.cpp:943
void set_flag(const std::string &flag)
Definition: team.hpp:331
static const std::set< std::string > attributes
Stores the attributes recognized by [side].
Definition: team.hpp:157
bool persistent() const
Definition: team.hpp:377
void increment_action_bonus_count()
Definition: team.hpp:240
const std::string & flag() const
Definition: team.hpp:327
bool hidden() const
Definition: team.hpp:375
std::string last_recruit_
Definition: team.hpp:460
recall_list_manager & recall_list()
Definition: team.hpp:242
void set_village_gold(int income)
Definition: team.hpp:199
void set_hidden(bool value)
Definition: team.hpp:376
void set_village_support(int support)
Definition: team.hpp:212
void set_defeat_condition_string(const std::string &value)
sets the defeat condition if
Definition: team.hpp:373
const std::string & last_recruit() const
Definition: team.hpp:255
bool get_disallow_observers() const
Definition: team.hpp:368
void set_no_turn_confirmation(bool value)
Definition: team.hpp:394
std::shared_ptr< wb::side_actions > planned_actions_
Whiteboard planned actions for this team.
Definition: team.hpp:472
bool share_view() const
Definition: team.hpp:417
void set_save_id(const std::string &save_id)
Definition: team.hpp:260
const std::set< std::string > & recruits() const
Definition: team.hpp:250
const t_string & user_team_name() const
Definition: team.hpp:324
void make_idle()
Definition: team.hpp:314
void lose_village(const map_location &)
Definition: team.cpp:450
void set_share_vision(const std::string &vision_status)
Definition: team.hpp:420
void set_base_income(int amount)
Sets the income of this side to the given value with base income from [game_config] added to it.
Definition: team.cpp:408
void set_share_vision(team_shared_vision::type vision_status)
Definition: team.hpp:425
boost::dynamic_bitset enemies_
Definition: team.hpp:465
void remove_fog_override(const std::set< map_location > &hexes)
Removes the record of hexes that were cleared of fog via WML.
Definition: team.cpp:728
bool fogged(const map_location &loc) const
Definition: team.cpp:645
void set_lost(bool value=true)
Definition: team.hpp:379
bool is_empty() const
Definition: team.hpp:286
bool lost() const
Definition: team.hpp:380
void place_shroud(const map_location &loc)
Definition: team.hpp:348
void change_controller_by_wml(const std::string &new_controller)
Definition: team.cpp:569
void set_gold(int amount)
Definition: team.hpp:219
bool chose_random() const
Definition: team.hpp:436
void log_recruitable() const
Definition: team.cpp:1014
void toggle_droid()
Definition: team.hpp:320
void new_turn()
Definition: team.hpp:218
const std::vector< const shroud_map * > & ally_shroud(const std::vector< team > &teams) const
Definition: team.cpp:663
Definitions for the interface to Wesnoth Markup Language (WML).
const config * cfg
void set(CURSOR_TYPE type)
Use the default parameter to reset cursors.
Definition: cursor.cpp:171
Domain specific events.
std::tuple< bool, bool > pump_result_t
Definition: fwd.hpp:29
bool fire_event(const ui_event event, const std::vector< std::pair< widget *, ui_event >> &event_chain, widget *dispatcher, widget *w, F &&... params)
Helper function for fire_event.
std::size_t index(std::string_view str, const std::size_t index)
Codepoint index corresponding to the nth character in a UTF-8 string.
Definition: unicode.cpp:70
Definition: display.hpp:45
std::string to_string(const Range &range, const Func &op)
std::unique_ptr< MIX_Audio, decltype(&MIX_DestroyAudio)> value
Definition: sound.cpp:138
The basic class for representing 8-bit RGB or RGBA colour values.
Definition: color.hpp:51
Encapsulates the map of the game.
Definition: location.hpp:46
int wml_y() const
Definition: location.hpp:187
int wml_x() const
Definition: location.hpp:186
static constexpr utils::optional< enum_type > get_enum(const std::string_view value)
Converts a string into its enum equivalent.
Definition: enum_base.hpp:57
std::string color
Definition: team.hpp:129
double carryover_bonus
Definition: team.hpp:138
int carryover_gold
Definition: team.hpp:139
bool chose_random
Definition: team.hpp:124
std::string team_name
Definition: team.hpp:89
void read(const config &cfg)
Definition: team.cpp:173
t_string user_team_name
Definition: team.hpp:90
int minimum_recruit_price
Definition: team.hpp:86
t_string faction_name
Definition: team.hpp:93
config variables
Definition: team.hpp:140
std::string countdown_time
Definition: team.hpp:97
void handle_legacy_share_vision(const config &cfg)
Definition: team.cpp:260
std::string flag
Definition: team.hpp:100
std::string current_player
Definition: team.hpp:96
bool is_local
Definition: team.hpp:115
side_proxy_controller::type proxy_controller
Definition: team.hpp:118
int carryover_percentage
Definition: team.hpp:135
t_string side_name
Definition: team.hpp:91
bool scroll_to_leader
Definition: team.hpp:105
t_string objectives
Definition: team.hpp:107
int action_bonus_count
Definition: team.hpp:98
int start_gold
Definition: team.hpp:82
std::string id
Definition: team.hpp:103
void write(config &cfg) const
Definition: team.cpp:273
std::string faction
Definition: team.hpp:92
bool carryover_add
Definition: team.hpp:136
bool no_turn_confirmation
Definition: team.hpp:127
bool disallow_observers
Definition: team.hpp:122
std::string flag_icon
Definition: team.hpp:101
int recall_cost
Definition: team.hpp:87
bool no_leader
Definition: team.hpp:125
bool persistent
Definition: team.hpp:132
bool allow_player
Definition: team.hpp:123
side_controller::type controller
Definition: team.hpp:114
int support_per_village
Definition: team.hpp:85
defeat_condition::type defeat_cond
Definition: team.hpp:116
int income_per_village
Definition: team.hpp:84
std::string save_id
Definition: team.hpp:94
std::set< std::string > can_recruit
Definition: team.hpp:88
bool objectives_changed
< Team's objectives for the current level.
Definition: team.hpp:112
team_shared_vision::type share_vision
Definition: team.hpp:121
void validate_side(int side)
Definition: team.cpp:740
mock_char c
static map_location::direction n