The Battle for Wesnoth  1.17.21+dev
team.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2023
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 #include "units/ptr.hpp"
29 
30 #include <set>
31 
32 #include <cstdint>
33 #include <boost/dynamic_bitset.hpp>
34 
35 class game_data;
36 class gamemap;
37 struct color_t;
38 
39 
40 namespace wb {
41  class side_actions;
42 }
43 
44 class shroud_map {
45 public:
46  shroud_map() : enabled_(false), data_() {}
47 
48  void place(int x, int y);
49  bool clear(int x, int y);
50  void reset();
51 
52  bool value(int x, int y) const;
53  bool shared_value(const std::vector<const shroud_map*>& maps, int x, int y) const;
54 
55  bool copy_from(const std::vector<const shroud_map*>& maps);
56 
57  std::string write() const;
58  void read(const std::string& shroud_data);
59  void merge(const std::string& shroud_data);
60 
61  bool enabled() const { return enabled_; }
62  void set_enabled(bool enabled) { enabled_ = enabled; }
63 
64  int width() const;
65  int height() const;
66 private:
67  bool enabled_;
68  std::vector<std::vector<bool>> data_;
69 };
70 
71 /**
72  * This class stores all the data for a single 'side' (in game nomenclature).
73  * E.g., there is only one leader unit per team.
74  */
75 class team
76 {
77 private:
78  struct team_info
79  {
80  team_info();
81  void read(const config &cfg);
82  void write(config& cfg) const;
83  int gold;
85  int income;
88  mutable int minimum_recruit_price;
90  std::set<std::string> can_recruit;
91  std::string team_name;
94  std::string faction;
96  std::string save_id;
97  // 'id' of the current player (not necessarily unique)
98  std::string current_player;
99  std::string countdown_time;
101 
102  std::string flag;
103  std::string flag_icon;
104 
105  std::string id;
106 
108 
109  t_string objectives; /** < Team's objectives for the current level. */
110 
111  /** Set to true when the objectives for this time changes.
112  * Reset to false when the objectives for this team have been
113  * displayed to the user. */
114  mutable bool objectives_changed;
115 
117  bool is_local;
119 
120  side_proxy_controller::type proxy_controller; // when controller == HUMAN, the proxy controller determines what input method is actually used.
121  // proxy controller is an interface property, not gamestate. it is not synced, not known to server.
122  // also not saved in save game file
127  bool no_leader;
128  bool hidden;
129  bool no_turn_confirmation; // Can suppress confirmations when ending a turn.
130 
131  std::string color;
132 
133  int side;
135  bool lost;
136 
139  // 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.
143  void handle_legacy_share_vision(const config& cfg);
144  };
145 
146  static const int default_team_gold_;
147 
148 public:
149  team();
150  virtual ~team();
151 
152  /**
153  * Stores the attributes recognized by [side]. These should be stripped
154  * from a side's config before using it to create the side's leader.
155  */
156  static const std::set<std::string> attributes;
157 
158  void build(const config &cfg, const gamemap &map, int gold = default_team_gold_);
159 
160  void write(config& cfg) const;
161 
162  void fix_villages(const gamemap &map);
163  /**
164  * Acquires a village from owner_side.
165  * 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.
166  * For no event, pass it nullptr.
167  * Default is the resources::gamedata pointer.
168  */
170  void lose_village(const map_location&);
171  void clear_villages() { villages_.clear(); }
172  const std::set<map_location>& villages() const { return villages_; }
173  bool owns_village(const map_location& loc) const
174  { return villages_.count(loc) > 0; }
175 
176  int side() const { return info_.side; }
177  int gold() const { return gold_; }
178  int start_gold() const { return info_.start_gold; }
180  int village_gold() const { return info_.income_per_village; }
181  int recall_cost() const { return info_.recall_cost; }
182  void set_village_gold(int income) { info_.income_per_village = income; }
183  void set_recall_cost(int cost) { info_.recall_cost = cost; }
184  int total_income() const { return base_income() + static_cast<int>(villages_.size()) * info_.income_per_village; }
185  /** @return The number of unit levels each village can support,
186  i.e. how much upkeep each village can bear. */
187  int village_support() const { return info_.support_per_village; }
188  /** @param support The number of unit levels each village can support */
190  /** Calculate total support capacity, based on support_per_village. */
191  int support() const { return static_cast<int>(villages_.size()) * village_support(); }
192  void new_turn() { gold_ += total_income(); }
194  void set_gold(int amount) { gold_ = amount; }
195  void set_start_gold(const int amount) { info_.start_gold = amount; }
196  void spend_gold(const int amount) { gold_ -= amount; }
197  void set_base_income(int amount) { info_.income = amount - game_config::base_income; }
198  int countdown_time() const { return countdown_time_; }
199  void set_countdown_time (const int amount) const
200  { countdown_time_ = amount; }
201  int action_bonus_count() const { return action_bonus_count_; }
202  void set_action_bonus_count(const int count) { action_bonus_count_ = count; }
204  const recall_list_manager & recall_list() const {return recall_list_;}
205  void set_current_player(const std::string& player)
206  { info_.current_player = player; }
207 
209  void set_scroll_to_leader(bool value) { info_.scroll_to_leader = value; }
210 
211  const std::set<std::string>& recruits() const
212  { return info_.can_recruit; }
213  void add_recruit(const std::string &);
214  void set_recruits(const std::set<std::string>& recruits);
215  int minimum_recruit_price() const;
216  const std::string& last_recruit() const { return last_recruit_; }
217  void last_recruit(const std::string & u_type) { last_recruit_ = u_type; }
218 
219  const std::string& save_id() const { return info_.save_id; }
220  std::string save_id_or_number() const { return info_.save_id.empty() ? std::to_string(info_.side) : info_.save_id; }
221  void set_save_id(const std::string& save_id) { info_.save_id = save_id; }
222  const std::string& current_player() const { return info_.current_player; }
223 
224  void set_objectives(const t_string& new_objectives, bool silently=false);
225  void set_objectives_changed(bool c = true) const { info_.objectives_changed = c; }
227 
228  const t_string& objectives() const { return info_.objectives; }
229  bool objectives_changed() const { return info_.objectives_changed; }
230 
231  bool is_enemy(int n) const {
232  const std::size_t index = std::size_t(n-1);
233  if(index >= enemies_.size()) {
235  }
236  if(index < enemies_.size()) {
237  return enemies_[index];
238  } else {
239  return false;
240  }
241  }
242 
244  const std::string& color() const { return info_.color; }
245  /** @note Call display::reinit_flag_for_side() after calling this */
246  void set_color(const std::string& color) { info_.color = color; }
247  bool is_empty() const { return info_.controller == side_controller::type::none; }
248 
249  bool is_local() const { return !is_empty() && info_.is_local; }
250  bool is_network() const { return !is_empty() && !info_.is_local; }
251 
252  bool is_human() const { return info_.controller == side_controller::type::human; }
253  bool is_ai() const { return info_.controller == side_controller::type::ai; }
254 
255  bool is_local_human() const { return is_human() && is_local(); }
256  bool is_local_ai() const { return is_ai() && is_local(); }
257  bool is_network_human() const { return is_human() && is_network(); }
258  bool is_network_ai() const { return is_ai() && is_network(); }
259 
260  void set_local(bool local) { info_.is_local = local; }
261  void make_human() { info_.controller = side_controller::type::human; }
262  void make_ai() { info_.controller = side_controller::type::ai; }
263  void change_controller(const std::string& new_controller) {
264  info_.controller = side_controller::get_enum(new_controller).value_or(side_controller::type::ai);
265  }
267  void change_controller_by_wml(const std::string& new_controller);
268 
270  bool is_proxy_human() const { return info_.proxy_controller == side_proxy_controller::type::human; }
271  bool is_droid() const { return info_.proxy_controller == side_proxy_controller::type::ai; }
272  bool is_idle() const { return info_.proxy_controller == side_proxy_controller::type::idle; }
273 
274  void make_droid() { info_.proxy_controller = side_proxy_controller::type::ai; }
275  void make_idle() { info_.proxy_controller = side_proxy_controller::type::idle; }
276  void make_proxy_human() { info_.proxy_controller = side_proxy_controller::type::human; }
278 
280 
281  void toggle_droid() { info_.proxy_controller = (info_.proxy_controller == side_proxy_controller::type::ai ) ? side_proxy_controller::type::human : side_proxy_controller::type::ai; }
282  void toggle_idle() { info_.proxy_controller = (info_.proxy_controller == side_proxy_controller::type::idle) ? side_proxy_controller::type::human : side_proxy_controller::type::idle; }
283 
284  const std::string& team_name() const { return info_.team_name; }
285  const t_string &user_team_name() const { return info_.user_team_name; }
286  void change_team(const std::string &name, const t_string &user_name);
287 
288  const std::string& flag() const { return info_.flag; }
289  const std::string& flag_icon() const { return info_.flag_icon; }
290 
291  /** @note Call display::reinit_flag_for_side() after calling this */
292  void set_flag(const std::string& flag) { info_.flag = flag; }
293  void set_flag_icon(const std::string& flag_icon) { info_.flag_icon = flag_icon; }
294 
295  const std::string& side_name() const { return info_.side_name.empty() ? info_.current_player : info_.side_name.str(); }
297  void set_side_name(const t_string& new_name) {info_.side_name = new_name == info_.current_player ? "" : new_name;}
298  const std::string& faction() const { return info_.faction; }
299  const t_string& faction_name() const { return info_.faction_name; }
300  //Returns true if the hex is shrouded/fogged for this side, or
301  //any other ally with shared vision.
302  bool shrouded(const map_location& loc) const;
303  bool fogged(const map_location& loc) const;
304 
305  bool uses_shroud() const { return shroud_.enabled(); }
306  bool uses_fog() const { return fog_.enabled(); }
307  bool fog_or_shroud() const { return uses_shroud() || uses_fog(); }
308  bool clear_shroud(const map_location& loc) { return shroud_.clear(loc.wml_x(),loc.wml_y()); }
309  void place_shroud(const map_location& loc) { shroud_.place(loc.wml_x(),loc.wml_y()); }
310  bool clear_fog(const map_location& loc) { return fog_.clear(loc.wml_x(),loc.wml_y()); }
311  void reshroud() { shroud_.reset(); }
312  void refog() { fog_.reset(); }
314  void set_fog(bool fog) { fog_.set_enabled(fog); }
315  std::string shroud_data() const { return shroud_.write(); }
316 
317  /** Merge a WML shroud map with the shroud data of this player. */
319 
320  bool knows_about_team(std::size_t index) const;
321  /** Records hexes that were cleared of fog via WML. */
322  void add_fog_override(const std::set<map_location> &hexes) { fog_clearer_.insert(hexes.begin(), hexes.end()); }
323  /** Removes the record of hexes that were cleared of fog via WML. */
324  void remove_fog_override(const std::set<map_location> &hexes);
325 
326  bool auto_shroud_updates() const { return auto_shroud_updates_; }
327  void set_auto_shroud_updates(bool value) { auto_shroud_updates_ = value; }
329  bool no_leader() const { return info_.no_leader; }
332  /** sets the defeat condition if @param value is a valid defeat condition, otherwise nothing happes. */
333  void set_defeat_condition_string(const std::string& value) { info_.defeat_cond = defeat_condition::get_enum(value).value_or(info_.defeat_cond); }
334  void have_leader(bool value=true) { info_.no_leader = !value; }
335  bool hidden() const { return info_.hidden; }
336  void set_hidden(bool value) { info_.hidden=value; }
337  bool persistent() const { return info_.persistent; }
338  void set_persistent(bool value) { info_.persistent = value; }
339  void set_lost(bool value=true) { info_.lost = value; }
340  bool lost() const { return info_.lost; }
341 
344  void set_carryover_add(bool value) { info_.carryover_add = value; }
345  bool carryover_add() const { return info_.carryover_add; }
346  void set_carryover_bonus(double value) { info_.carryover_bonus = value; }
347  double carryover_bonus() const { return info_.carryover_bonus; }
348  void set_carryover_gold(int value) { info_.carryover_gold = value; }
349  int carryover_gold() const { return info_.carryover_gold; }
351  const config& variables() const { return info_.variables; }
352 
355 
356  //function which, when given a 1-based side will return the color used by that side.
357  static const color_range get_side_color_range(int side);
358 
359  static color_t get_side_color(int side);
360  static color_t get_minimap_color(int side);
361 
362  static std::string get_side_color_id(unsigned side);
363  static const t_string get_side_color_name_for_UI(unsigned side);
364  static std::string get_side_color_id_from_config(const config& cfg);
365  static std::string get_side_highlight_pango(int side);
366 
367  void log_recruitable() const;
368 
369  /** clear the shroud, fog, and enemies cache for all teams*/
370  static void clear_caches();
371 
372  /** get the whiteboard planned actions for this team */
373  std::shared_ptr<wb::side_actions> get_side_actions() const { return planned_actions_; }
374 
375  config to_config() const;
376 
377  bool share_maps() const { return info_.share_vision != team_shared_vision::type::none ; }
378  bool share_view() const { return info_.share_vision == team_shared_vision::type::all; }
380 
381  void set_share_vision(const std::string& vision_status) {
382  info_.share_vision = team_shared_vision::get_enum(vision_status).value_or(team_shared_vision::type::all);
383  clear_caches();
384  }
385 
387  info_.share_vision = vision_status;
388  clear_caches();
389  }
390 
392  {
394  }
395  std::string allied_human_teams() const;
396 
397  bool chose_random() const
398  {
399  return info_.chose_random;
400  }
401 
402 private:
403 
404  const std::vector<const shroud_map*>& ally_shroud(const std::vector<team>& teams) const;
405  const std::vector<const shroud_map*>& ally_fog(const std::vector<team>& teams) const;
406 
407  int gold_;
408  std::set<map_location> villages_;
409 
411  /** Stores hexes that have been cleared of fog via WML. */
412  std::set<map_location> fog_clearer_;
413 
415 
417 
418  mutable int countdown_time_;
420 
422  std::string last_recruit_;
423 
424 private:
425  void calculate_enemies(std::size_t index) const;
426  bool calculate_is_enemy(std::size_t index) const;
427  mutable boost::dynamic_bitset<> enemies_;
428 
429  mutable std::vector<const shroud_map*> ally_shroud_, ally_fog_;
430 
431  /**
432  * Whiteboard planned actions for this team.
433  */
434  std::shared_ptr<wb::side_actions> planned_actions_;
435 };
436 
437 //function which will validate a side. Throws game::game_error
438 //if the side is invalid
439 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:50
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:161
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:923
int height() const
Definition: team.cpp:773
void read(const std::string &shroud_data)
Definition: team.cpp:888
void set_enabled(bool enabled)
Definition: team.hpp:62
shroud_map()
Definition: team.hpp:46
bool enabled() const
Definition: team.hpp:61
std::vector< std::vector< bool > > data_
Definition: team.hpp:68
void place(int x, int y)
Definition: team.cpp:803
int width() const
Definition: team.cpp:768
bool shared_value(const std::vector< const shroud_map * > &maps, int x, int y) const
Definition: team.cpp:851
void merge(const std::string &shroud_data)
Definition: team.cpp:907
bool value(int x, int y) const
Definition: team.cpp:831
std::string write() const
Definition: team.cpp:872
void reset()
Definition: team.cpp:820
bool enabled_
Definition: team.hpp:67
bool clear(int x, int y)
Definition: team.cpp:781
bool empty() const
Definition: tstring.hpp:187
const std::string & str() const
Definition: tstring.hpp:191
This class stores all the data for a single 'side' (in game nomenclature).
Definition: team.hpp:76
static std::string get_side_highlight_pango(int side)
Definition: team.cpp:1031
bool uses_shroud() const
Definition: team.hpp:305
void set_action_bonus_count(const int count)
Definition: team.hpp:202
int carryover_gold() const
Definition: team.hpp:349
const std::string & color() const
Definition: team.hpp:244
bool clear_shroud(const map_location &loc)
Definition: team.hpp:308
void have_leader(bool value=true)
Definition: team.hpp:334
bool is_ai() const
Definition: team.hpp:253
static color_t get_minimap_color(int side)
Definition: team.cpp:965
bool no_turn_confirmation() const
Definition: team.hpp:353
void set_carryover_percentage(int value)
Definition: team.hpp:342
void fix_villages(const gamemap &map)
Definition: team.cpp:425
bool is_proxy_human() const
Definition: team.hpp:270
config & variables()
Definition: team.hpp:350
const std::string & side_name() const
Definition: team.hpp:295
recall_list_manager recall_list_
Definition: team.hpp:421
int side() const
Definition: team.hpp:176
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:437
bool is_human() const
Definition: team.hpp:252
void set_flag_icon(const std::string &flag_icon)
Definition: team.hpp:293
void set_scroll_to_leader(bool value)
Definition: team.hpp:209
int support() const
Calculate total support capacity, based on support_per_village.
Definition: team.hpp:191
const std::string & faction() const
Definition: team.hpp:298
int village_support() const
Definition: team.hpp:187
std::vector< const shroud_map * > ally_shroud_
Definition: team.hpp:429
int recall_cost() const
Definition: team.hpp:181
static const color_range get_side_color_range(int side)
Definition: team.cpp:948
void set_objectives_changed(bool c=true) const
Definition: team.hpp:225
void set_shroud(bool shroud)
Definition: team.hpp:313
bool is_droid() const
Definition: team.hpp:271
bool fog_or_shroud() const
Definition: team.hpp:307
void change_proxy(side_proxy_controller::type proxy)
Definition: team.hpp:279
bool auto_shroud_updates() const
Definition: team.hpp:326
void set_local(bool local)
Definition: team.hpp:260
const std::string & current_player() const
Definition: team.hpp:222
void set_recruits(const std::set< std::string > &recruits)
Definition: team.cpp:470
const std::string & team_name() const
Definition: team.hpp:284
bool objectives_changed() const
Definition: team.hpp:229
void set_carryover_gold(int value)
Definition: team.hpp:348
bool is_local() const
Definition: team.hpp:249
void set_carryover_bonus(double value)
Definition: team.hpp:346
static std::string get_side_color_id_from_config(const config &cfg)
Definition: team.cpp:1011
bool is_local_human() const
Definition: team.hpp:255
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:318
bool no_leader() const
Definition: team.hpp:329
void toggle_idle()
Definition: team.hpp:282
void refog()
Definition: team.hpp:312
bool clear_fog(const map_location &loc)
Definition: team.hpp:310
int village_gold() const
Definition: team.hpp:180
bool is_enemy(int n) const
Definition: team.hpp:231
config to_config() const
Definition: team.cpp:1046
team_shared_vision::type share_vision() const
Definition: team.hpp:379
void set_auto_shroud_updates(bool value)
Definition: team.hpp:327
int action_bonus_count() const
Definition: team.hpp:201
shroud_map fog_
Definition: team.hpp:410
bool owns_village(const map_location &loc) const
Definition: team.hpp:173
bool calculate_is_enemy(std::size_t index) const
Definition: team.cpp:520
const std::set< map_location > & villages() const
Definition: team.hpp:172
const recall_list_manager & recall_list() const
Definition: team.hpp:204
void set_current_player(const std::string &player)
Definition: team.hpp:205
void change_controller(side_controller::type controller)
Definition: team.hpp:266
bool knows_about_team(std::size_t index) const
Definition: team.cpp:704
const t_string & objectives() const
Definition: team.hpp:228
void change_team(const std::string &name, const t_string &user_name)
Definition: team.cpp:617
int gold() const
Definition: team.hpp:177
static const t_string get_side_color_name_for_UI(unsigned side)
Definition: team.cpp:999
team()
Definition: team.cpp:330
const t_string & faction_name() const
Definition: team.hpp:299
defeat_condition::type defeat_cond() const
Definition: team.hpp:330
void set_objectives(const t_string &new_objectives, bool silently=false)
Definition: team.cpp:642
t_string side_name_tstr() const
Definition: team.hpp:296
bool carryover_add() const
Definition: team.hpp:345
std::string shroud_data() const
Definition: team.hpp:315
void clear_proxy()
Definition: team.hpp:277
void handle_legacy_share_vision(const config &cfg)
Definition: team.hpp:391
int carryover_percentage() const
Definition: team.hpp:343
void write(config &cfg) const
Definition: team.cpp:403
static std::string get_side_color_id(unsigned side)
Definition: team.cpp:972
bool is_network_ai() const
Definition: team.hpp:258
bool is_network() const
Definition: team.hpp:250
std::vector< const shroud_map * > ally_fog_
Definition: team.hpp:429
int total_income() const
Definition: team.hpp:184
void set_persistent(bool value)
Definition: team.hpp:338
void reset_objectives_changed() const
Definition: team.hpp:226
void set_recall_cost(int cost)
Definition: team.hpp:183
void set_side_name(const t_string &new_name)
Definition: team.hpp:297
void set_start_gold(const int amount)
Definition: team.hpp:195
void build(const config &cfg, const gamemap &map, int gold=default_team_gold_)
Definition: team.cpp:353
team_info info_
Definition: team.hpp:416
void reshroud()
Definition: team.hpp:311
const std::string & save_id() const
Definition: team.hpp:219
int countdown_time_
Definition: team.hpp:418
static const int default_team_gold_
Definition: team.hpp:146
void set_carryover_add(bool value)
Definition: team.hpp:344
bool is_local_ai() const
Definition: team.hpp:256
void calculate_enemies(std::size_t index) const
Definition: team.cpp:509
void add_recruit(const std::string &)
Definition: team.cpp:480
side_controller::type controller() const
Definition: team.hpp:243
bool is_idle() const
Definition: team.hpp:272
int minimum_recruit_price() const
Definition: team.cpp:487
double carryover_bonus() const
Definition: team.hpp:347
void make_droid()
Definition: team.hpp:274
void change_controller(const std::string &new_controller)
Definition: team.hpp:263
void make_ai()
Definition: team.hpp:262
void add_fog_override(const std::set< map_location > &hexes)
Records hexes that were cleared of fog via WML.
Definition: team.hpp:322
virtual ~team()
Definition: team.cpp:349
static void clear_caches()
clear the shroud, fog, and enemies cache for all teams
Definition: team.cpp:630
std::shared_ptr< wb::side_actions > get_side_actions() const
get the whiteboard planned actions for this team
Definition: team.hpp:373
bool auto_shroud_updates_
Definition: team.hpp:414
bool share_maps() const
Definition: team.hpp:377
void set_defeat_condition(defeat_condition::type value)
Definition: team.hpp:331
std::set< map_location > fog_clearer_
Stores hexes that have been cleared of fog via WML.
Definition: team.hpp:412
bool is_network_human() const
Definition: team.hpp:257
std::string allied_human_teams() const
Definition: team.cpp:1054
int action_bonus_count_
Definition: team.hpp:419
bool shrouded(const map_location &loc) const
Definition: team.cpp:651
void set_fog(bool fog)
Definition: team.hpp:314
const config & variables() const
Definition: team.hpp:351
std::set< map_location > villages_
Definition: team.hpp:408
void set_color(const std::string &color)
Definition: team.hpp:246
void make_proxy_human()
Definition: team.hpp:276
int start_gold() const
Definition: team.hpp:178
const std::string & flag_icon() const
Definition: team.hpp:289
shroud_map shroud_
Definition: team.hpp:410
void set_countdown_time(const int amount) const
Definition: team.hpp:199
void make_human()
Definition: team.hpp:261
std::string save_id_or_number() const
Definition: team.hpp:220
void spend_gold(const int amount)
Definition: team.hpp:196
const std::vector< const shroud_map * > & ally_fog(const std::vector< team > &teams) const
Definition: team.cpp:691
void clear_villages()
Definition: team.hpp:171
bool get_scroll_to_leader() const
Definition: team.hpp:208
side_proxy_controller::type proxy_controller() const
Definition: team.hpp:269
int base_income() const
Definition: team.hpp:179
bool uses_fog() const
Definition: team.hpp:306
static color_t get_side_color(int side)
Definition: team.cpp:960
void set_flag(const std::string &flag)
Definition: team.hpp:292
static const std::set< std::string > attributes
Stores the attributes recognized by [side].
Definition: team.hpp:156
bool persistent() const
Definition: team.hpp:337
int countdown_time() const
Definition: team.hpp:198
const std::string & flag() const
Definition: team.hpp:288
bool hidden() const
Definition: team.hpp:335
std::string last_recruit_
Definition: team.hpp:422
void get_shared_maps()
recall_list_manager & recall_list()
Definition: team.hpp:203
int gold_
Definition: team.hpp:407
void set_village_gold(int income)
Definition: team.hpp:182
void set_hidden(bool value)
Definition: team.hpp:336
void set_village_support(int support)
Definition: team.hpp:189
void last_recruit(const std::string &u_type)
Definition: team.hpp:217
void set_defeat_condition_string(const std::string &value)
sets the defeat condition if
Definition: team.hpp:333
const std::string & last_recruit() const
Definition: team.hpp:216
bool get_disallow_observers() const
Definition: team.hpp:328
void set_no_turn_confirmation(bool value)
Definition: team.hpp:354
std::shared_ptr< wb::side_actions > planned_actions_
Whiteboard planned actions for this team.
Definition: team.hpp:434
bool share_view() const
Definition: team.hpp:378
void set_save_id(const std::string &save_id)
Definition: team.hpp:221
const std::set< std::string > & recruits() const
Definition: team.hpp:211
const t_string & user_team_name() const
Definition: team.hpp:285
void make_idle()
Definition: team.hpp:275
void lose_village(const map_location &)
Definition: team.cpp:463
void set_share_vision(const std::string &vision_status)
Definition: team.hpp:381
void set_base_income(int amount)
Definition: team.hpp:197
void set_share_vision(team_shared_vision::type vision_status)
Definition: team.hpp:386
boost::dynamic_bitset enemies_
Definition: team.hpp:427
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:745
bool fogged(const map_location &loc) const
Definition: team.cpp:660
void set_lost(bool value=true)
Definition: team.hpp:339
bool is_empty() const
Definition: team.hpp:247
bool lost() const
Definition: team.hpp:340
void place_shroud(const map_location &loc)
Definition: team.hpp:309
void change_controller_by_wml(const std::string &new_controller)
Definition: team.cpp:584
void set_gold(int amount)
Definition: team.hpp:194
bool chose_random() const
Definition: team.hpp:397
void log_recruitable() const
Definition: team.cpp:1036
void toggle_droid()
Definition: team.hpp:281
void new_turn()
Definition: team.hpp:192
const std::vector< const shroud_map * > & ally_shroud(const std::vector< team > &teams) const
Definition: team.cpp:678
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:525
bool shroud()
Definition: game.cpp:535
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:72
Definition: display.hpp:49
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:131
double carryover_bonus
Definition: team.hpp:140
int carryover_gold
Definition: team.hpp:141
bool chose_random
Definition: team.hpp:126
std::string team_name
Definition: team.hpp:91
void read(const config &cfg)
Definition: team.cpp:166
t_string user_team_name
Definition: team.hpp:92
int minimum_recruit_price
Definition: team.hpp:88
t_string faction_name
Definition: team.hpp:95
config variables
Definition: team.hpp:142
std::string countdown_time
Definition: team.hpp:99
void handle_legacy_share_vision(const config &cfg)
Definition: team.cpp:268
std::string flag
Definition: team.hpp:102
std::string current_player
Definition: team.hpp:98
bool is_local
Definition: team.hpp:117
side_proxy_controller::type proxy_controller
Definition: team.hpp:120
int carryover_percentage
Definition: team.hpp:137
t_string side_name
Definition: team.hpp:93
bool scroll_to_leader
Definition: team.hpp:107
t_string objectives
Definition: team.hpp:109
int action_bonus_count
Definition: team.hpp:100
int start_gold
Definition: team.hpp:84
std::string id
Definition: team.hpp:105
void write(config &cfg) const
Definition: team.cpp:281
std::string faction
Definition: team.hpp:94
bool carryover_add
Definition: team.hpp:138
bool no_turn_confirmation
Definition: team.hpp:129
bool disallow_observers
Definition: team.hpp:124
std::string flag_icon
Definition: team.hpp:103
int recall_cost
Definition: team.hpp:89
bool no_leader
Definition: team.hpp:127
bool persistent
Definition: team.hpp:134
bool allow_player
Definition: team.hpp:125
side_controller::type controller
Definition: team.hpp:116
int support_per_village
Definition: team.hpp:87
defeat_condition::type defeat_cond
Definition: team.hpp:118
int income_per_village
Definition: team.hpp:86
std::string save_id
Definition: team.hpp:96
std::set< std::string > can_recruit
Definition: team.hpp:90
bool objectives_changed
< Team's objectives for the current level.
Definition: team.hpp:114
team_shared_vision::type share_vision
Definition: team.hpp:123
void validate_side(int side)
Definition: team.cpp:757
mock_char c
static map_location::DIRECTION n