aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/modifier/ModifierEffect.hpp
diff options
context:
space:
mode:
author hop311 <hop3114@gmail.com>2024-09-30 22:10:01 +0200
committer hop311 <hop3114@gmail.com>2024-10-05 22:48:42 +0200
commitf3f364f08cc8f1c80a5dfce689183c2f8f75bbd4 (patch)
treec7c206ab58440bd8d5200c4416e97a324489d018 /src/openvic-simulation/modifier/ModifierEffect.hpp
parenteb77495ba874d474bbbbc950a65e8f496b13f285 (diff)
Move ModifierEffect and ModifierValue into their own files
Diffstat (limited to 'src/openvic-simulation/modifier/ModifierEffect.hpp')
-rw-r--r--src/openvic-simulation/modifier/ModifierEffect.hpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/openvic-simulation/modifier/ModifierEffect.hpp b/src/openvic-simulation/modifier/ModifierEffect.hpp
new file mode 100644
index 0000000..8eac65b
--- /dev/null
+++ b/src/openvic-simulation/modifier/ModifierEffect.hpp
@@ -0,0 +1,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 {};
+}