The Battle for Wesnoth  1.19.0-dev
team.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2024
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_config.hpp"
22 #include "game_events/fwd.hpp"
23 #include "map/location.hpp"
24 #include "recall_list_manager.hpp"
25 #include "side_controller.hpp"
27 #include "team_shared_vision.hpp"
28 
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.
141  void handle_legacy_share_vision(const config& cfg);
142  };
143 
144  static const int default_team_gold_;
145 
146 public:
147  team();
148  virtual ~team();
149 
150  /**
151  * Stores the attributes recognized by [side]. These should be stripped
152  * from a side's config before using it to create the side's leader.
153  */
154  static const std::set<std::string> attributes;
155 
156  void build(const config &cfg, const gamemap &map, int gold = default_team_gold_);
157 
158  void write(config& cfg) const;
159 
160  void fix_villages(const gamemap &map);
161  /**
162  * Acquires a village from owner_side.
163  * 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.
164  * For no event, pass it nullptr.
165  * Default is the resources::gamedata pointer.
166  */
168  void lose_village(const map_location&);
169  void clear_villages() { villages_.clear(); }
170  const std::set<map_location>& villages() const { return villages_; }
171  bool owns_village(const map_location& loc) const
172  { return villages_.count(loc) > 0; }
173 
174  int side() const { return info_.side; }
175  int gold() const { return gold_; }
176  int start_gold() const { return info_.start_gold; }
178  int village_gold() const { return info_.income_per_village; }
179  int recall_cost() const { return info_.recall_cost; }
180  void set_village_gold(int income) { info_.income_per_village = income; }
181  void set_recall_cost(int cost) { info_.recall_cost = cost; }
182  int total_income() const { return base_income() + static_cast<int>(villages_.size()) * info_.income_per_village; }
183  /** @return The number of unit levels each village can support,
184  i.e. how much upkeep each village can bear. */
185  int village_support() const { return info_.support_per_village; }
186  /** @param support The number of unit levels each village can support */
188  /** Calculate total support capacity, based on support_per_village. */
189  int support() const { return static_cast<int>(villages_.size()) * village_support(); }
190  void new_turn() { gold_ += total_income(); }
192  void set_gold(int amount) { gold_ = amount; }
193  void set_start_gold(const int amount) { info_.start_gold = amount; }
194  void spend_gold(const int amount) { gold_ -= amount; }
195  void set_base_income(int amount) { info_.income = amount - game_config::base_income; }
196  int countdown_time() const { return countdown_time_; }
197  void set_countdown_time (const int amount) const
198  { countdown_time_ = amount; }
199  int action_bonus_count() const { return action_bonus_count_; }
200  void set_action_bonus_count(const int count) { action_bonus_count_ = count; }
202  const recall_list_manager & recall_list() const {return recall_list_;}
203  void set_current_player(const std::string& player)
204  { info_.current_player = player; }
205 
207  void set_scroll_to_leader(bool value) { info_.scroll_to_leader = value; }
208 
209  const std::set<std::string>& recruits() const
210  { return info_.can_recruit; }
211  void add_recruit(const std::string &);
212  void set_recruits(const std::set<std::string>& recruits);
213  int minimum_recruit_price() const;
214  const std::string& last_recruit() const { return last_recruit_; }
215  void last_recruit(const std::string & u_type) { last_recruit_ = u_type; }
216 
217  const std::string& save_id() const { return info_.save_id; }
218  std::string save_id_or_number() const { return info_.save_id.empty() ? std::to_string(info_.side) : info_.save_id; }
219  void set_save_id(const std::string& save_id) { info_.save_id = save_id; }
220  const std::string& current_player() const { return info_.current_player; }
221 
222  void set_objectives(const t_string& new_objectives, bool silently=false);
223  void set_objectives_changed(bool c = true) const { info_.objectives_changed = c; }
225 
226  const t_string& objectives() const { return info_.objectives; }
227  bool objectives_changed() const { return info_.objectives_changed; }
228 
229  bool is_enemy(int n) const {
230  const std::size_t index = std::size_t(n-1);
231  if(index >= enemies_.size()) {
233  }
234  if(index < enemies_.size()) {
235  return enemies_[index];
236  } else {
237  return false;
238  }
239  }
240 
242  const std::string& color() const { return info_.color; }
243  /** @note Call display::reinit_flag_for_side() after calling this */
244  void set_color(const std::string& color) { info_.color = color; }
245  bool is_empty() const { return info_.controller == side_controller::type::none; }
246 
247  bool is_local() const { return !is_empty() && info_.is_local; }
248  bool is_network() const { return !is_empty() && !info_.is_local; }
249 
250  bool is_human() const { return info_.controller == side_controller::type::human; }
251  bool is_ai() const { return info_.controller == side_controller::type::ai; }
252 
253  bool is_local_human() const { return is_human() && is_local(); }
254  bool is_local_ai() const { return is_ai() && is_local(); }
255  bool is_network_human() const { return is_human() && is_network(); }
256  bool is_network_ai() const { return is_ai() && is_network(); }
257 
258  void set_local(bool local) { info_.is_local = local; }
259  void make_human() { info_.controller = side_controller::type::human; }
260  void make_ai() { info_.controller = side_controller::type::ai; }
261  void change_controller(const std::string& new_controller) {
262  info_.controller = side_controller::get_enum(new_controller).value_or(side_controller::type::ai);
263  }
265  void change_controller_by_wml(const std::string& new_controller);
266 
268  bool is_proxy_human() const { return info_.proxy_controller == side_proxy_controller::type::human; }
269  bool is_droid() const { return info_.proxy_controller == side_proxy_controller::type::ai; }
270  bool is_idle() const { return info_.proxy_controller == side_proxy_controller::type::idle; }
271 
272  void make_droid() { info_.proxy_controller = side_proxy_controller::type::ai; }
273  void make_idle() { info_.proxy_controller = side_proxy_controller::type::idle; }
274  void make_proxy_human() { info_.proxy_controller = side_proxy_controller::type::human; }
276 
278 
279  void toggle_droid() { info_.proxy_controller = (info_.proxy_controller == side_proxy_controller::type::ai ) ? side_proxy_controller::type::human : side_proxy_controller::type::ai; }
280  void toggle_idle() { info_.proxy_controller = (info_.proxy_controller == side_proxy_controller::type::idle) ? side_proxy_controller::type::human : side_proxy_controller::type::idle; }
281 
282  const std::string& team_name() const { return info_.team_name; }
283  const t_string &user_team_name() const { return info_.user_team_name; }
284  void change_team(const std::string &name, const t_string &user_name);
285 
286  const std::string& flag() const { return info_.flag; }
287  const std::string& flag_icon() const { return info_.flag_icon; }
288 
289  /** @note Call display::reinit_flag_for_side() after calling this */
290  void set_flag(const std::string& flag) { info_.flag = flag; }
291  void set_flag_icon(const std::string& flag_icon) { info_.flag_icon = flag_icon; }
292 
293  const std::string& side_name() const { return info_.side_name.empty() ? info_.current_player : info_.side_name.str(); }
295  void set_side_name(const t_string& new_name) {info_.side_name = new_name == info_.current_player ? "" : new_name;}
296  const std::string& faction() const { return info_.faction; }
297  const t_string& faction_name() const { return info_.faction_name; }
298  //Returns true if the hex is shrouded/fogged for this side, or
299  //any other ally with shared vision.
300  bool shrouded(const map_location& loc) const;
301  bool fogged(const map_location& loc) const;
302 
303  bool uses_shroud() const { return shroud_.enabled(); }
304  bool uses_fog() const { return fog_.enabled(); }
305  bool fog_or_shroud() const { return uses_shroud() || uses_fog(); }
306  bool clear_shroud(const map_location& loc) { return shroud_.clear(loc.wml_x(),loc.wml_y()); }
307  void place_shroud(const map_location& loc) { shroud_.place(loc.wml_x(),loc.wml_y()); }
308  bool clear_fog(const map_location& loc) { return fog_.clear(loc.wml_x(),loc.wml_y()); }
309  void reshroud() { shroud_.reset(); }
310  void refog() { fog_.reset(); }
312  void set_fog(bool fog) { fog_.set_enabled(fog); }
313  std::string shroud_data() const { return shroud_.write(); }
314 
315  /** Merge a WML shroud map with the shroud data of this player. */
317 
318  bool knows_about_team(std::size_t index) const;
319  /** Records hexes that were cleared of fog via WML. */
320  void add_fog_override(const std::set<map_location> &hexes) { fog_clearer_.insert(hexes.begin(), hexes.end()); }
321  /** Removes the record of hexes that were cleared of fog via WML. */
322  void remove_fog_override(const std::set<map_location> &hexes);
323 
324  bool auto_shroud_updates() const { return auto_shroud_updates_; }
325  void set_auto_shroud_updates(bool value) { auto_shroud_updates_ = value; }
327  bool no_leader() const { return info_.no_leader; }
330  /** sets the defeat condition if @param value is a valid defeat condition, otherwise nothing happes. */
331  void set_defeat_condition_string(const std::string& value) { info_.defeat_cond = defeat_condition::get_enum(value).value_or(info_.defeat_cond); }
332  void have_leader(bool value=true) { info_.no_leader = !value; }
333  bool hidden() const { return info_.hidden; }
334  void set_hidden(bool value) { info_.hidden=value; }
335  bool persistent() const { return info_.persistent; }
336  void set_persistent(bool value) { info_.persistent = value; }
337  void set_lost(bool value=true) { info_.lost = value; }
338  bool lost() const { return info_.lost; }
339 
342  void set_carryover_add(bool value) { info_.carryover_add = value; }
343  bool carryover_add() const { return info_.carryover_add; }
344  void set_carryover_bonus(double value) { info_.carryover_bonus = value; }
345  double carryover_bonus() const { return info_.carryover_bonus; }
346  void set_carryover_gold(int value) { info_.carryover_gold = value; }
347  int carryover_gold() const { return info_.carryover_gold; }
349  const config& variables() const { return info_.variables; }
350 
353 
354  //function which, when given a 1-based side will return the color used by that side.
355  static const color_range get_side_color_range(int side);
356 
357  static color_t get_side_color(int side);
358  static color_t get_minimap_color(int side);
359 
360  static std::string get_side_color_id(unsigned side);
361  static const t_string get_side_color_name_for_UI(unsigned side);
362  static std::string get_side_color_id_from_config(const config& cfg);
363  static std::string get_side_highlight_pango(int side);
364 
365  void log_recruitable() const;
366 
367  /** clear the shroud, fog, and enemies cache for all teams*/
368  static void clear_caches();
369 
370  /** get the whiteboard planned actions for this team */
371  std::shared_ptr<wb::side_actions> get_side_actions() const { return planned_actions_; }
372 
373  config to_config() const;
374 
375  bool share_maps() const { return info_.share_vision != team_shared_vision::type::none ; }
376  bool share_view() const { return info_.share_vision == team_shared_vision::type::all; }
378 
379  void set_share_vision(const std::string& vision_status) {
380  info_.share_vision = team_shared_vision::get_enum(vision_status).value_or(team_shared_vision::type::all);
381  clear_caches();
382  }
383 
385  info_.share_vision = vision_status;
386  clear_caches();
387  }
388 
390  {
392  }
393  std::string allied_human_teams() const;
394 
395  bool chose_random() const
396  {
397  return info_.chose_random;
398  }
399 
400 private:
401 
402  const std::vector<const shroud_map*>& ally_shroud(const std::vector<team>& teams) const;
403  const std::vector<const shroud_map*>& ally_fog(const std::vector<team>& teams) const;
404 
405  int gold_;
406  std::set<map_location> villages_;
407 
409  /** Stores hexes that have been cleared of fog via WML. */
410  std::set<map_location> fog_clearer_;
411 
413 
415 
416  mutable int countdown_time_;
418 
420  std::string last_recruit_;
421 
422 private:
423  void calculate_enemies(std::size_t index) const;
424  bool calculate_is_enemy(std::size_t index) const;
425  mutable boost::dynamic_bitset<> enemies_;
426 
427  mutable std::vector<const shroud_map*> ally_shroud_, ally_fog_;
428 
429  /**
430  * Whiteboard planned actions for this team.
431  */
432  std::shared_ptr<wb::side_actions> planned_actions_;
433 };
434 
435 //function which will validate a side. Throws game::game_error
436 //if the side is invalid
437 void validate_side(int side); //throw game::game_error
A color range definition is made of four reference RGB colors, used for calculating conversions from ...
Definition: color_range.hpp:49
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:159
Encapsulates the map of the game.
Definition: map.hpp:172
This class encapsulates the recall list of a team.
bool copy_from(const std::vector< const shroud_map * > &maps)
Definition: team.cpp:922
int height() const
Definition: team.cpp:772
void read(const std::string &shroud_data)
Definition: team.cpp:887
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:802
int width() const
Definition: team.cpp:767
bool shared_value(const std::vector< const shroud_map * > &maps, int x, int y) const
Definition: team.cpp:850
void merge(const std::string &shroud_data)
Definition: team.cpp:906
bool value(int x, int y) const
Definition: team.cpp:830
std::string write() const
Definition: team.cpp:871
void reset()
Definition: team.cpp:819
bool enabled_
Definition: team.hpp:65
bool clear(int x, int y)
Definition: team.cpp:780
bool empty() const
Definition: tstring.hpp:186
const std::string & str() const
Definition: tstring.hpp:190
This class stores all the data for a single 'side' (in game nomenclature).
Definition: team.hpp:74
static std::string get_side_highlight_pango(int side)
Definition: team.cpp:1030
bool uses_shroud() const
Definition: team.hpp:303
void set_action_bonus_count(const int count)
Definition: team.hpp:200
int carryover_gold() const
Definition: team.hpp:347
const std::string & color() const
Definition: team.hpp:242
bool clear_shroud(const map_location &loc)
Definition: team.hpp:306
void have_leader(bool value=true)
Definition: team.hpp:332
bool is_ai() const
Definition: team.hpp:251
static color_t get_minimap_color(int side)
Definition: team.cpp:964
bool no_turn_confirmation() const
Definition: team.hpp:351
void set_carryover_percentage(int value)
Definition: team.hpp:340
void fix_villages(const gamemap &map)
Definition: team.cpp:424
bool is_proxy_human() const
Definition: team.hpp:268
config & variables()
Definition: team.hpp:348
const std::string & side_name() const
Definition: team.hpp:293
recall_list_manager recall_list_
Definition: team.hpp:419
int side() const
Definition: team.hpp:174
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:436
bool is_human() const
Definition: team.hpp:250
void set_flag_icon(const std::string &flag_icon)
Definition: team.hpp:291
void set_scroll_to_leader(bool value)
Definition: team.hpp:207
int support() const
Calculate total support capacity, based on support_per_village.
Definition: team.hpp:189
const std::string & faction() const
Definition: team.hpp:296
int village_support() const
Definition: team.hpp:185
std::vector< const shroud_map * > ally_shroud_
Definition: team.hpp:427
int recall_cost() const
Definition: team.hpp:179
static const color_range get_side_color_range(int side)
Definition: team.cpp:947
void set_objectives_changed(bool c=true) const
Definition: team.hpp:223
void set_shroud(bool shroud)
Definition: team.hpp:311
bool is_droid() const
Definition: team.hpp:269
bool fog_or_shroud() const
Definition: team.hpp:305
void change_proxy(side_proxy_controller::type proxy)
Definition: team.hpp:277
bool auto_shroud_updates() const
Definition: team.hpp:324
void set_local(bool local)
Definition: team.hpp:258
const std::string & current_player() const
Definition: team.hpp:220
void set_recruits(const std::set< std::string > &recruits)
Definition: team.cpp:469
const std::string & team_name() const
Definition: team.hpp:282
bool objectives_changed() const
Definition: team.hpp:227
void set_carryover_gold(int value)
Definition: team.hpp:346
bool is_local() const
Definition: team.hpp:247
void set_carryover_bonus(double value)
Definition: team.hpp:344
static std::string get_side_color_id_from_config(const config &cfg)
Definition: team.cpp:1010
bool is_local_human() const
Definition: team.hpp:253
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:316
bool no_leader() const
Definition: team.hpp:327
void toggle_idle()
Definition: team.hpp:280
void refog()
Definition: team.hpp:310
bool clear_fog(const map_location &loc)
Definition: team.hpp:308
int village_gold() const
Definition: team.hpp:178
bool is_enemy(int n) const
Definition: team.hpp:229
config to_config() const
Definition: team.cpp:1045
team_shared_vision::type share_vision() const
Definition: team.hpp:377
void set_auto_shroud_updates(bool value)
Definition: team.hpp:325
int action_bonus_count() const
Definition: team.hpp:199
shroud_map fog_
Definition: team.hpp:408
bool owns_village(const map_location &loc) const
Definition: team.hpp:171
bool calculate_is_enemy(std::size_t index) const
Definition: team.cpp:519
const std::set< map_location > & villages() const
Definition: team.hpp:170
const recall_list_manager & recall_list() const
Definition: team.hpp:202
void set_current_player(const std::string &player)
Definition: team.hpp:203
void change_controller(side_controller::type controller)
Definition: team.hpp:264
bool knows_about_team(std::size_t index) const
Definition: team.cpp:703
const t_string & objectives() const
Definition: team.hpp:226
void change_team(const std::string &name, const t_string &user_name)
Definition: team.cpp:616
int gold() const
Definition: team.hpp:175
static const t_string get_side_color_name_for_UI(unsigned side)
Definition: team.cpp:998
team()
Definition: team.cpp:329
const t_string & faction_name() const
Definition: team.hpp:297
defeat_condition::type defeat_cond() const
Definition: team.hpp:328
void set_objectives(const t_string &new_objectives, bool silently=false)
Definition: team.cpp:641
t_string side_name_tstr() const
Definition: team.hpp:294
bool carryover_add() const
Definition: team.hpp:343
std::string shroud_data() const
Definition: team.hpp:313
void clear_proxy()
Definition: team.hpp:275
void handle_legacy_share_vision(const config &cfg)
Definition: team.hpp:389
int carryover_percentage() const
Definition: team.hpp:341
void write(config &cfg) const
Definition: team.cpp:402
static std::string get_side_color_id(unsigned side)
Definition: team.cpp:971
bool is_network_ai() const
Definition: team.hpp:256
bool is_network() const
Definition: team.hpp:248
std::vector< const shroud_map * > ally_fog_
Definition: team.hpp:427
int total_income() const
Definition: team.hpp:182
void set_persistent(bool value)
Definition: team.hpp:336
void reset_objectives_changed() const
Definition: team.hpp:224
void set_recall_cost(int cost)
Definition: team.hpp:181
void set_side_name(const t_string &new_name)
Definition: team.hpp:295
void set_start_gold(const int amount)
Definition: team.hpp:193
void build(const config &cfg, const gamemap &map, int gold=default_team_gold_)
Definition: team.cpp:352
team_info info_
Definition: team.hpp:414
void reshroud()
Definition: team.hpp:309
const std::string & save_id() const
Definition: team.hpp:217
int countdown_time_
Definition: team.hpp:416
static const int default_team_gold_
Definition: team.hpp:144
void set_carryover_add(bool value)
Definition: team.hpp:342
bool is_local_ai() const
Definition: team.hpp:254
void calculate_enemies(std::size_t index) const
Definition: team.cpp:508
void add_recruit(const std::string &)
Definition: team.cpp:479
side_controller::type controller() const
Definition: team.hpp:241
bool is_idle() const
Definition: team.hpp:270
int minimum_recruit_price() const
Definition: team.cpp:486
double carryover_bonus() const
Definition: team.hpp:345
void make_droid()
Definition: team.hpp:272
void change_controller(const std::string &new_controller)
Definition: team.hpp:261
void make_ai()
Definition: team.hpp:260
void add_fog_override(const std::set< map_location > &hexes)
Records hexes that were cleared of fog via WML.
Definition: team.hpp:320
virtual ~team()
Definition: team.cpp:348
static void clear_caches()
clear the shroud, fog, and enemies cache for all teams
Definition: team.cpp:629
std::shared_ptr< wb::side_actions > get_side_actions() const
get the whiteboard planned actions for this team
Definition: team.hpp:371
bool auto_shroud_updates_
Definition: team.hpp:412
bool share_maps() const
Definition: team.hpp:375
void set_defeat_condition(defeat_condition::type value)
Definition: team.hpp:329
std::set< map_location > fog_clearer_
Stores hexes that have been cleared of fog via WML.
Definition: team.hpp:410
bool is_network_human() const
Definition: team.hpp:255
std::string allied_human_teams() const
Definition: team.cpp:1053
int action_bonus_count_
Definition: team.hpp:417
bool shrouded(const map_location &loc) const
Definition: team.cpp:650
void set_fog(bool fog)
Definition: team.hpp:312
const config & variables() const
Definition: team.hpp:349
std::set< map_location > villages_
Definition: team.hpp:406
void set_color(const std::string &color)
Definition: team.hpp:244
void make_proxy_human()
Definition: team.hpp:274
int start_gold() const
Definition: team.hpp:176
const std::string & flag_icon() const
Definition: team.hpp:287
shroud_map shroud_
Definition: team.hpp:408
void set_countdown_time(const int amount) const
Definition: team.hpp:197
void make_human()
Definition: team.hpp:259
std::string save_id_or_number() const
Definition: team.hpp:218
void spend_gold(const int amount)
Definition: team.hpp:194
const std::vector< const shroud_map * > & ally_fog(const std::vector< team > &teams) const
Definition: team.cpp:690
void clear_villages()
Definition: team.hpp:169
bool get_scroll_to_leader() const
Definition: team.hpp:206
side_proxy_controller::type proxy_controller() const
Definition: team.hpp:267
int base_income() const
Definition: team.hpp:177
bool uses_fog() const
Definition: team.hpp:304
static color_t get_side_color(int side)
Definition: team.cpp:959
void set_flag(const std::string &flag)
Definition: team.hpp:290
static const std::set< std::string > attributes
Stores the attributes recognized by [side].
Definition: team.hpp:154
bool persistent() const
Definition: team.hpp:335
int countdown_time() const
Definition: team.hpp:196
const std::string & flag() const
Definition: team.hpp:286
bool hidden() const
Definition: team.hpp:333
std::string last_recruit_
Definition: team.hpp:420
void get_shared_maps()
recall_list_manager & recall_list()
Definition: team.hpp:201
int gold_
Definition: team.hpp:405
void set_village_gold(int income)
Definition: team.hpp:180
void set_hidden(bool value)
Definition: team.hpp:334
void set_village_support(int support)
Definition: team.hpp:187
void last_recruit(const std::string &u_type)
Definition: team.hpp:215
void set_defeat_condition_string(const std::string &value)
sets the defeat condition if
Definition: team.hpp:331
const std::string & last_recruit() const
Definition: team.hpp:214
bool get_disallow_observers() const
Definition: team.hpp:326
void set_no_turn_confirmation(bool value)
Definition: team.hpp:352
std::shared_ptr< wb::side_actions > planned_actions_
Whiteboard planned actions for this team.
Definition: team.hpp:432
bool share_view() const
Definition: team.hpp:376
void set_save_id(const std::string &save_id)
Definition: team.hpp:219
const std::set< std::string > & recruits() const
Definition: team.hpp:209
const t_string & user_team_name() const
Definition: team.hpp:283
void make_idle()
Definition: team.hpp:273
void lose_village(const map_location &)
Definition: team.cpp:462
void set_share_vision(const std::string &vision_status)
Definition: team.hpp:379
void set_base_income(int amount)
Definition: team.hpp:195
void set_share_vision(team_shared_vision::type vision_status)
Definition: team.hpp:384
boost::dynamic_bitset enemies_
Definition: team.hpp:425
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:744
bool fogged(const map_location &loc) const
Definition: team.cpp:659
void set_lost(bool value=true)
Definition: team.hpp:337
bool is_empty() const
Definition: team.hpp:245
bool lost() const
Definition: team.hpp:338
void place_shroud(const map_location &loc)
Definition: team.hpp:307
void change_controller_by_wml(const std::string &new_controller)
Definition: team.cpp:583
void set_gold(int amount)
Definition: team.hpp:192
bool chose_random() const
Definition: team.hpp:395
void log_recruitable() const
Definition: team.cpp:1035
void toggle_droid()
Definition: team.hpp:279
void new_turn()
Definition: team.hpp:190
const std::vector< const shroud_map * > & ally_shroud(const std::vector< team > &teams) const
Definition: team.cpp:677
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.
bool fog()
Definition: game.cpp:522
bool shroud()
Definition: game.cpp:532
std::size_t index(const std::string &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
The basic class for representing 8-bit RGB or RGBA colour values.
Definition: color.hpp:59
Encapsulates the map of the game.
Definition: location.hpp:38
int wml_y() const
Definition: location.hpp:154
int wml_x() const
Definition: location.hpp:153
static constexpr std::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:165
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:267
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:280
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:756
mock_char c
static map_location::DIRECTION n