aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/pop
diff options
context:
space:
mode:
author wvpm <24685035+wvpm@users.noreply.github.com>2024-10-30 22:08:36 +0100
committer GitHub <noreply@github.com>2024-10-30 22:08:36 +0100
commit5d8451172fefa93f6f53583fa6b8723f1dd3598e (patch)
tree187df50130475006b404c5ab57f0fa679173ad04 /src/openvic-simulation/pop
parent48e4e92682db99239e928a67e6677cdd2c53a375 (diff)
parent0d861669d9e1f5d487c810ae01be50f142790f1e (diff)
Merge pull request #206 from OpenVicProject/prepare_for_rgo
Prepare for rgo
Diffstat (limited to 'src/openvic-simulation/pop')
-rw-r--r--src/openvic-simulation/pop/Pop.cpp20
-rw-r--r--src/openvic-simulation/pop/Pop.hpp6
2 files changed, 23 insertions, 3 deletions
diff --git a/src/openvic-simulation/pop/Pop.cpp b/src/openvic-simulation/pop/Pop.cpp
index 4b81e5d..0f0de69 100644
--- a/src/openvic-simulation/pop/Pop.cpp
+++ b/src/openvic-simulation/pop/Pop.cpp
@@ -9,6 +9,7 @@
#include "openvic-simulation/politics/Ideology.hpp"
#include "openvic-simulation/politics/Issue.hpp"
#include "openvic-simulation/politics/Rebel.hpp"
+#include "openvic-simulation/utility/Logger.hpp"
#include "openvic-simulation/utility/TslHelper.hpp"
using namespace OpenVic;
@@ -19,7 +20,7 @@ using enum PopType::income_type_t;
PopBase::PopBase(
PopType const& new_type, Culture const& new_culture, Religion const& new_religion, pop_size_t new_size,
fixed_point_t new_militancy, fixed_point_t new_consciousness, RebelType const* new_rebel_type
-) : type { new_type }, culture { new_culture }, religion { new_religion }, size { new_size }, militancy { new_militancy },
+) : type { &new_type }, culture { new_culture }, religion { new_religion }, size { new_size }, militancy { new_militancy },
consciousness { new_consciousness }, rebel_type { new_rebel_type } {}
Pop::Pop(PopBase const& pop_base, decltype(ideologies)::keys_t const& ideology_keys)
@@ -115,6 +116,17 @@ void Pop::setup_pop_test_values(IssueManager const& issue_manager) {
luxury_needs_fulfilled = test_range();
}
+bool Pop::convert_to_equivalent() {
+ PopType const* const equivalent = get_type()->get_equivalent();
+ if (equivalent == nullptr) {
+ Logger::error("Tried to convert pop of type ", get_type()->get_identifier(), " to equivalent, but there is no equivalent.");
+ return false;
+ }
+
+ type = equivalent;
+ return true;
+}
+
void Pop::set_location(ProvinceInstance const& new_location) {
if (location != &new_location) {
location = &new_location;
@@ -131,7 +143,7 @@ void Pop::set_location(ProvinceInstance const& new_location) {
void Pop::update_gamestate(
DefineManager const& define_manager, CountryInstance const* owner, fixed_point_t const& pop_size_per_regiment_multiplier
) {
- if (type.get_can_be_recruited()) {
+ if (type->get_can_be_recruited()) {
if (
size < define_manager.get_min_pop_size_for_regiment() || owner == nullptr ||
!RegimentType::allowed_cultures_check_culture_in_country(owner->get_allowed_regiment_cultures(), culture, *owner)
@@ -145,6 +157,10 @@ void Pop::update_gamestate(
}
}
+//TODO store income
+void Pop::add_rgo_owner_income(const fixed_point_t income) {}
+void Pop::add_rgo_worker_income(const fixed_point_t income) {}
+
Strata::Strata(std::string_view new_identifier) : HasIdentifier { new_identifier } {}
PopType::PopType(
diff --git a/src/openvic-simulation/pop/Pop.hpp b/src/openvic-simulation/pop/Pop.hpp
index 59a7794..88c397a 100644
--- a/src/openvic-simulation/pop/Pop.hpp
+++ b/src/openvic-simulation/pop/Pop.hpp
@@ -35,7 +35,7 @@ namespace OpenVic {
using pop_size_t = int32_t;
protected:
- PopType const& PROPERTY_ACCESS(type, protected);
+ PopType const* PROPERTY_ACCESS(type, protected);
Culture const& PROPERTY_ACCESS(culture, protected);
Religion const& PROPERTY_ACCESS(religion, protected);
pop_size_t PROPERTY_ACCESS(size, protected);
@@ -95,6 +95,7 @@ namespace OpenVic {
Pop& operator=(Pop&&) = delete;
void setup_pop_test_values(IssueManager const& issue_manager);
+ bool convert_to_equivalent();
void set_location(ProvinceInstance const& new_location);
@@ -102,6 +103,9 @@ namespace OpenVic {
DefineManager const& define_manager, CountryInstance const* owner,
fixed_point_t const& pop_size_per_regiment_multiplier
);
+
+ void add_rgo_owner_income(const fixed_point_t income);
+ void add_rgo_worker_income(const fixed_point_t income);
};
struct Strata : HasIdentifier {