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
50
51
52
53
|
#pragma once
#include <string>
#include <string_view>
#include "openvic-simulation/types/EnumBitfield.hpp"
#include "openvic-simulation/types/HasIdentifier.hpp"
namespace OpenVic {
struct ModifierManager;
struct ModifierEffect : HasIdentifier {
friend struct ModifierManager;
enum class format_t : uint8_t {
PROPORTION_DECIMAL, /* An unscaled fraction/ratio, with 1 being "full"/"whole" */
PERCENTAGE_DECIMAL, /* A fraction/ratio scaled so that 100 is "full"/"whole" */
RAW_DECIMAL, /* A continuous quantity, e.g. attack strength */
INT /* A discrete quantity, e.g. building count limit */
};
enum class target_t : uint8_t {
NO_TARGETS = 0,
COUNTRY = 1 << 0,
PROVINCE = 1 << 1,
UNIT = 1 << 2,
ALL_TARGETS = (1 << 3) - 1
};
static std::string make_default_modifier_effect_localisation_key(std::string_view identifier);
private:
/* If true, positive values will be green and negative values will be red.
* If false, the colours will be switced.
*/
const bool PROPERTY_CUSTOM_PREFIX(positive_good, is);
const format_t PROPERTY(format);
const target_t PROPERTY(targets);
std::string PROPERTY(localisation_key);
// TODO - format/precision, e.g. 80% vs 0.8 vs 0.800, 2 vs 2.0 vs 200%
ModifierEffect(
std::string_view new_identifier, bool new_positive_good, format_t new_format, target_t mew_targets,
std::string_view new_localisation_key
);
public:
ModifierEffect(ModifierEffect&&) = default;
};
template<> struct enable_bitfield<ModifierEffect::target_t> : std::true_type {};
}
|