aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/politics/PartyIssue.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/politics/PartyIssue.hpp')
-rw-r--r--src/openvic-simulation/politics/PartyIssue.hpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/openvic-simulation/politics/PartyIssue.hpp b/src/openvic-simulation/politics/PartyIssue.hpp
new file mode 100644
index 0000000..8b0acdc
--- /dev/null
+++ b/src/openvic-simulation/politics/PartyIssue.hpp
@@ -0,0 +1,48 @@
+#pragma once
+
+#include "types/IdentifierRegistry.hpp"
+
+namespace OpenVic {
+ struct PartyIssueManager;
+
+ struct PartyIssueGroup : HasIdentifier {
+ friend struct PartyIssueManager;
+
+ private:
+ PartyIssueGroup(const std::string_view new_identifier);
+
+ public:
+ PartyIssueGroup(PartyIssueGroup&&) = default;
+ };
+
+ struct PartyIssue : HasIdentifier {
+ friend struct PartyIssueManager;
+
+ private:
+ PartyIssueGroup const& group;
+
+ //TODO - modifiers when party with issue is in power
+
+ PartyIssue(const std::string_view new_identifier, PartyIssueGroup const& new_group);
+
+ public:
+ PartyIssue(PartyIssue&&) = default;
+ };
+
+ struct PartyIssueManager {
+ private:
+ IdentifierRegistry<PartyIssueGroup> party_issue_groups;
+ IdentifierRegistry<PartyIssue> party_issues;
+
+ public:
+ PartyIssueManager();
+
+ bool add_party_issue_group(const std::string_view identifier);
+ IDENTIFIER_REGISTRY_ACCESSORS(PartyIssueGroup, party_issue_group)
+
+ bool add_party_issue(const std::string_view identifier, PartyIssueGroup const* group);
+ IDENTIFIER_REGISTRY_ACCESSORS(PartyIssue, party_issue)
+
+ //TODO - loaders
+ };
+} \ No newline at end of file