aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/pop
diff options
context:
space:
mode:
author wvpm <24685035+wvpm@users.noreply.github.com>2024-09-22 01:07:51 +0200
committer wvpm <24685035+wvpm@users.noreply.github.com>2024-10-30 22:04:41 +0100
commit0d861669d9e1f5d487c810ae01be50f142790f1e (patch)
tree187df50130475006b404c5ab57f0fa679173ad04 /src/openvic-simulation/pop
parent48e4e92682db99239e928a67e6677cdd2c53a375 (diff)
Implement rgo for new gameprepare_for_rgo
Map province history rgo to production type for province instance output_goods back to ZERO_OR_ONE Link trade_goods in history to RGO instance for province. Other producer types as structs instead of classes Convert pops to equivalents & calculate rgo size Also convert pops when changing rgo Clean up Refactored RGO into part of ProvinceInstance ProductionType const& output_good Remove unused imports Clean up unused imports Restore constructor for ResourceGatheringOperation to initialise from savegame Move rgo size calculation to rgo Use terrain modifiers to calculate rgo size (placeholder code) Clean up Basic production & sales for rgo when initialising new game Use mutable pops Paychecks for owners, workers and slaves Clean up Simplify rgo instantiation Co-authored-by: Hop311 <Hop3114@gmail.com> Simplify good_to_rgo_production_type assignment Co-authored-by: Hop311 <Hop3114@gmail.com> Fix import Co-authored-by: Hop311 <Hop3114@gmail.com> min(3, great_powers.size()) Co-authored-by: Hop311 <Hop3114@gmail.com> Fix import Co-authored-by: Hop311 <Hop3114@gmail.com> Apply comments Log errors and return result when applying history Cleanup
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 {