The Battle for Wesnoth  1.17.0-dev
helper.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2021
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 /**
17  * @file
18  * Support functions for dealing with units.
19  */
20 
21 #include "units/unit.hpp"
22 #include "units/helper.hpp"
23 #include "units/types.hpp"
24 #include "resources.hpp"
25 #include "play_controller.hpp"
26 #include "saved_game.hpp"
27 
28 namespace unit_helper {
29 
31 {
32  return u.advances_to().size() + u.get_modification_advances().size();
33 }
34 
36 {
37  if(!u.valid()) {
38  return false;
39  }
40  return u->advances() && number_of_possible_advances(*u) > 0;
41 }
42 
43 std::string resistance_color(const int resistance)
44 {
45  if (resistance < 0)
46  return std::string("#FF0000");
47 
48  if (resistance <= 20)
49  return std::string("#FFFF00");
50 
51  if (resistance <= 40)
52  return std::string("#FFFFFF");
53 
54  return std::string("#00FF00");
55 }
56 
57 static std::string unit_level_tooltip(const int level, const std::vector<std::string> &adv_to_types, const std::vector<config> &adv_to_mods)
58 {
59  std::ostringstream tooltip;
60  tooltip << _("Level: ") << "<b>" << level << "</b>\n";
61  const bool has_advancements = !adv_to_types.empty() || !adv_to_mods.empty();
62  if(has_advancements) {
63  tooltip << _("Advancements:") << "\n<b>\t";
64  if(!adv_to_types.empty())
65  tooltip << utils::join(adv_to_types, "\n\t");
66  if(!adv_to_mods.empty()) {
67  if(!adv_to_types.empty())
68  tooltip << "\n\t";
69  std::vector<std::string> descriptions;
70  for(const config& adv : adv_to_mods)
71  descriptions.push_back(adv["description"].str());
72  tooltip << utils::join(descriptions, "\n\t");
73  }
74  tooltip << "</b>";
75  } else {
76  tooltip << _("No advancement");
77  }
78  return tooltip.str();
79 }
80 
81 std::string unit_level_tooltip(const unit &u)
82 {
84 }
85 
86 std::string unit_level_tooltip(const unit_type &type)
87 {
88  const auto mod_adv_iters = type.modification_advancements();
89  const std::vector<config> mod_advancements(mod_adv_iters.begin(), mod_adv_iters.end());
90 
91  return unit_level_tooltip(type.level(), type.advances_to(), mod_advancements);
92 }
93 
94 }
This class represents a single unit of a specific type.
Definition: unit.hpp:121
std::string join(const T &v, const std::string &s=",")
Generates a new string joining container items in a list.
const std::vector< std::string > & advances_to() const
A vector of unit_type ids that this unit_type can advance to.
Definition: types.hpp:118
bool will_certainly_advance(const unit_map::iterator &u)
Encapsulates the logic for deciding whether an iterator u points to a unit that can advance...
Definition: helper.cpp:35
static std::string _(const char *str)
Definition: gettext.hpp:93
A single unit type that the player may recruit.
Definition: types.hpp:45
const std::vector< std::string > advances_to_translated() const
Gets the names of the possible types this unit can advance to on level-up.
Definition: unit.cpp:1154
int level() const
The current level of this unit.
Definition: unit.hpp:550
config::const_child_itors modification_advancements() const
Returns two iterators pointing to a range of AMLA configs.
Definition: types.hpp:123
std::string resistance_color(const int resistance)
Definition: helper.cpp:43
int number_of_possible_advances(const unit &u)
Determines the total number of available advancements (of any kind) for a given unit.
Definition: helper.cpp:30
int level() const
Definition: types.hpp:167
static std::string unit_level_tooltip(const int level, const std::vector< std::string > &adv_to_types, const std::vector< config > &adv_to_mods)
Definition: helper.cpp:57
std::vector< config > get_modification_advances() const
Gets any non-typed advanced options set by modifications.
Definition: unit.cpp:1730
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:61
bool valid() const
Definition: map.hpp:274
const advances_to_t & advances_to() const
Gets the possible types this unit can advance to on level-up.
Definition: unit.hpp:235
std::string tooltip
Shown when hovering over an entry in the filter&#39;s drop-down list.
Definition: manager.cpp:219