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 #include "units/types.hpp"
23 
24 namespace unit_helper {
25 
27 {
28  return u.advances_to().size() + u.get_modification_advances().size();
29 }
30 
32 {
33  return u.valid() && u->advances() && number_of_possible_advances(*u) > 0;
34 }
35 
36 std::string resistance_color(const int resistance)
37 {
38  if (resistance < 0)
39  return std::string("#FF0000");
40 
41  if (resistance <= 20)
42  return std::string("#FFFF00");
43 
44  if (resistance <= 40)
45  return std::string("#FFFFFF");
46 
47  return std::string("#00FF00");
48 }
49 
50 std::string unit_level_tooltip(const int level, const std::vector<std::string> &adv_to_types, const std::vector<config> &adv_to_mods)
51 {
52  std::ostringstream tooltip;
53  tooltip << _("Level: ") << "<b>" << level << "</b>\n";
54  const bool has_advancements = !adv_to_types.empty() || !adv_to_mods.empty();
55  if(has_advancements) {
56  tooltip << _("Advancements:") << "\n<b>\t";
57  if(!adv_to_types.empty())
58  tooltip << utils::join(adv_to_types, "\n\t");
59  if(!adv_to_mods.empty()) {
60  if(!adv_to_types.empty())
61  tooltip << "\n\t";
62  std::vector<std::string> descriptions;
63  for(const config& adv : adv_to_mods)
64  descriptions.push_back(adv["description"].str());
65  tooltip << utils::join(descriptions, "\n\t");
66  }
67  tooltip << "</b>";
68  } else {
69  tooltip << _("No advancement");
70  }
71  return tooltip.str();
72 }
73 
74 std::string unit_level_tooltip(const unit &u)
75 {
77 }
78 
79 std::string unit_level_tooltip(const unit_type &type)
80 {
81  const auto mod_adv_iters = type.modification_advancements();
82  const std::vector<config> mod_advancements(mod_adv_iters.begin(), mod_adv_iters.end());
83 
84  return unit_level_tooltip(type.level(), type.advances_to(), mod_advancements);
85 }
86 
87 }
This class represents a single unit of a specific type.
Definition: unit.hpp:129
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:113
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:31
A single unit type that the player may recruit.
Definition: types.hpp:44
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:1196
int level() const
The current level of this unit.
Definition: unit.hpp:553
config::const_child_itors modification_advancements() const
Returns two iterators pointing to a range of AMLA configs.
Definition: types.hpp:118
std::string resistance_color(const int resistance)
Definition: helper.cpp:36
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:26
int level() const
Definition: types.hpp:154
std::vector< config > get_modification_advances() const
Gets any non-typed advanced options set by modifications.
Definition: unit.cpp:1772
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:50
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:234