From 5f64f983d0cead266a28791be42162c443fd2a75 Mon Sep 17 00:00:00 2001 From: hop311 Date: Sun, 31 Dec 2023 00:47:31 +0000 Subject: Added framework for loading all Conditions and Effects --- .../scripts/ConditionalWeight.hpp | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/openvic-simulation/scripts/ConditionalWeight.hpp (limited to 'src/openvic-simulation/scripts/ConditionalWeight.hpp') diff --git a/src/openvic-simulation/scripts/ConditionalWeight.hpp b/src/openvic-simulation/scripts/ConditionalWeight.hpp new file mode 100644 index 0000000..a965ae1 --- /dev/null +++ b/src/openvic-simulation/scripts/ConditionalWeight.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include +#include + +#include "openvic-simulation/dataloader/NodeTools.hpp" +#include "openvic-simulation/scripts/ConditionScript.hpp" +#include "openvic-simulation/types/fixed_point/FixedPoint.hpp" + +namespace OpenVic { + struct ConditionalWeight { + using condition_weight_t = std::pair; + using condition_weight_group_t = std::vector; + using condition_weight_item_t = std::variant; + + enum class base_key_t : uint8_t { + BASE, FACTOR, MONTHS + }; + using enum base_key_t; + + private: + fixed_point_t PROPERTY(base); + std::vector PROPERTY(condition_weight_items); + + struct parse_scripts_visitor_t; + + public: + ConditionalWeight() = default; + ConditionalWeight(ConditionalWeight&&) = default; + + static constexpr std::string_view base_key_to_string(base_key_t base_key) { + switch (base_key) { + case base_key_t::BASE: return "base"; + case base_key_t::FACTOR: return "factor"; + case base_key_t::MONTHS: return "months"; // TODO - add functionality for days or months or years + default: return "INVALID BASE KEY"; + } + } + + NodeTools::node_callback_t expect_conditional_weight(base_key_t base_key); + + bool parse_scripts(GameManager const& game_manager); + }; +} -- cgit v1.2.3-56-ga3b1