The Battle for Wesnoth  1.15.3+dev
helper.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2018 by David White <dave@whitevine.net>
3  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY.
11 
12  See the COPYING file for more details.
13 */
14 
15 /**
16  * @file
17  * Support functions for dealing with units.
18  */
19 
20 #include "units/unit.hpp"
21 #include "units/helper.hpp"
22 
23 namespace unit_helper {
24 
26 {
27  return u.advances_to().size() + u.get_modification_advances().size();
28 }
29 
31 {
32  return u.valid() && u->advances() && number_of_possible_advances(*u) > 0;
33 }
34 
35 std::string resistance_color(const int resistance)
36 {
37  if (resistance < 0)
38  return std::string("#FF0000");
39 
40  if (resistance <= 20)
41  return std::string("#FFFF00");
42 
43  if (resistance <= 40)
44  return std::string("#FFFFFF");
45 
46  return std::string("#00FF00");
47 }
48 
49 std::string unit_level_tooltip(const int level, const std::vector<std::string> &adv_to_types, const std::vector<config> &adv_to_mods)
50 {
51  std::ostringstream tooltip;
52  tooltip << _("Level: ") << "<b>" << level << "</b>\n";
53  const bool has_advancements = !adv_to_types.empty() || !adv_to_mods.empty();
54  if(has_advancements) {
55  tooltip << _("Advancements:") << "\n<b>\t";
56  if(!adv_to_types.empty())
57  tooltip << utils::join(adv_to_types, "\n\t");
58  if(!adv_to_mods.empty()) {
59  if(!adv_to_types.empty())
60  tooltip << "\n\t";
61  std::vector<std::string> descriptions;
62  for(const config& adv : adv_to_mods)
63  descriptions.push_back(adv["description"].str());
64  tooltip << utils::join(descriptions, "\n\t");
65  }
66  tooltip << "</b>";
67  } else {
68  tooltip << _("No advancement");
69  }
70  return tooltip.str();
71 }
72 
73 std::string unit_level_tooltip(const unit &u)
74 {
76 }
77 
78 std::string unit_level_tooltip(const unit_type &type)
79 {
80  const auto mod_adv_iters = type.modification_advancements();
81  const std::vector<config> mod_advancements(mod_adv_iters.begin(), mod_adv_iters.end());
82 
83  return unit_level_tooltip(type.level(), type.advances_to(), mod_advancements);
84 }
85 
86 }
This class represents a single unit of a specific type.
Definition: unit.hpp:106
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:106
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:30
A single unit type that the player may recruit.
Definition: types.hpp:42
static UNUSEDNOWARN std::string _(const char *str)
Definition: gettext.hpp:91
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:1198
int level() const
The current level of this unit.
Definition: unit.hpp:533
config::const_child_itors modification_advancements() const
Returns two iterators pointing to a range of AMLA configs.
Definition: types.hpp:111
std::string resistance_color(const int resistance)
Definition: helper.cpp:35
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:25
int level() const
Definition: types.hpp:147
std::vector< config > get_modification_advances() const
Gets any non-typed advanced options set by modifications.
Definition: unit.cpp:1774
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:49
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:68
bool valid() const
Definition: map.hpp:276
const advances_to_t & advances_to() const
Gets the possible types this unit can advance to on level-up.
Definition: unit.hpp:211