aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/modifier/ModifierEffect.cpp
blob: eadaf58a53a5188971f48abd620e241fd08a6fdf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "ModifierEffect.hpp"

#include "openvic-simulation/utility/StringUtils.hpp"

using namespace OpenVic;

std::string ModifierEffect::target_to_string(target_t target) {
   using enum target_t;

   if (target == NO_TARGETS) {
      return "NO TARGETS";
   }

   if (target == ALL_TARGETS) {
      return "ALL TARGETS";
   }

   static constexpr std::string_view SEPARATOR = " | ";

   std::string ret;

   const auto append_target = [target, &ret](target_t check_target, std::string_view target_str) -> void {
      if (!ModifierEffect::excludes_targets(target, check_target)) {
         if (!ret.empty()) {
            ret += SEPARATOR;
         }
         ret += target_str;
      }
   };

   append_target(COUNTRY, "COUNTRY");
   append_target(PROVINCE, "PROVINCE");
   append_target(UNIT, "UNIT");
   append_target(~ALL_TARGETS, "INVALID TARGET");

   return ret;
}

std::string ModifierEffect::make_default_modifier_effect_localisation_key(std::string_view identifier) {
   return "MODIFIER_" + StringUtils::string_toupper(identifier);
}

ModifierEffect::ModifierEffect(
   std::string_view new_identifier, bool new_is_positive_good, format_t new_format, target_t new_targets,
   std::string_view new_localisation_key, bool new_has_no_effect
) : HasIdentifier { new_identifier }, positive_good { new_is_positive_good }, format { new_format }, targets { new_targets },
   localisation_key {
      new_localisation_key.empty() ? make_default_modifier_effect_localisation_key(new_identifier) : new_localisation_key
   }, no_effect { new_has_no_effect } {}