From af4758d399a75485b9adfeb3058a526eec3c8a4d Mon Sep 17 00:00:00 2001 From: Joel Machens Date: Sun, 15 Oct 2023 12:39:11 -0500 Subject: Implement Leader Trait Loading --- src/openvic-simulation/military/LeaderTrait.hpp | 72 +++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/openvic-simulation/military/LeaderTrait.hpp (limited to 'src/openvic-simulation/military/LeaderTrait.hpp') diff --git a/src/openvic-simulation/military/LeaderTrait.hpp b/src/openvic-simulation/military/LeaderTrait.hpp new file mode 100644 index 0000000..f4445f6 --- /dev/null +++ b/src/openvic-simulation/military/LeaderTrait.hpp @@ -0,0 +1,72 @@ +#pragma once + +#include +#include +#include "openvic-simulation/types/IdentifierRegistry.hpp" +#include "openvic-simulation/types/fixed_point/FixedPoint.hpp" +#include "openvic-simulation/dataloader/NodeTools.hpp" +#include "openvic-simulation/Modifier.hpp" + +namespace OpenVic { + struct LeaderTraitManager; + + enum class trait_type_t { + PERSONALITY, + BACKGROUND + }; + + struct LeaderTrait : HasIdentifier { + friend struct LeaderTraitManager; + + private: + + const trait_type_t type; + /* + * Allowed modifiers for leaders: + * attack - integer + * defence - integer + * morale - % + * organisation - % + * reconnaissance - % + * speed - % + * attrition - %, negative is good + * experience - % + * reliability - decimal, mil gain or loss for associated POPs + */ + const ModifierValue modifiers; + + LeaderTrait(std::string_view new_identifier, trait_type_t new_type, ModifierValue new_modifiers); + + public: + LeaderTrait(LeaderTrait&&) = default; + + trait_type_t get_trait_type() const; + bool is_personality_trait() const; + bool is_background_trait() const; + ModifierValue get_modifiers() const; + }; + + struct LeaderTraitManager { + private: + IdentifierRegistry leader_traits; + const std::set> allowed_modifiers = { + "attack", + "defence", + "morale", + "organisation", + "reconnaissance", + "speed", + "attrition", + "experience", + "reliability" + }; + + public: + LeaderTraitManager(); + + bool add_leader_trait(std::string_view identifier, trait_type_t type, ModifierValue modifiers); + IDENTIFIER_REGISTRY_ACCESSORS(leader_trait) + + bool load_leader_traits_file(ModifierManager& modifier_manager, ast::NodeCPtr root); + }; +} // namespace OpenVic -- cgit v1.2.3-56-ga3b1