From 41d50b15ac978530a53ed99eea36f180e1d27b16 Mon Sep 17 00:00:00 2001 From: hop311 Date: Fri, 14 Jun 2024 23:06:19 +0100 Subject: Renamed Country to CountryDefinition --- src/openvic-simulation/map/MapInstance.cpp | 2 +- src/openvic-simulation/map/MapInstance.hpp | 4 ++-- src/openvic-simulation/map/Mapmode.cpp | 2 +- src/openvic-simulation/map/ProvinceInstance.cpp | 8 ++++---- src/openvic-simulation/map/ProvinceInstance.hpp | 13 +++++++------ src/openvic-simulation/map/State.cpp | 5 ++--- src/openvic-simulation/map/State.hpp | 6 +++--- 7 files changed, 20 insertions(+), 20 deletions(-) (limited to 'src/openvic-simulation/map') diff --git a/src/openvic-simulation/map/MapInstance.cpp b/src/openvic-simulation/map/MapInstance.cpp index 093d341..1547ade 100644 --- a/src/openvic-simulation/map/MapInstance.cpp +++ b/src/openvic-simulation/map/MapInstance.cpp @@ -86,7 +86,7 @@ bool MapInstance::setup(BuildingTypeManager const& building_type_manager) { bool MapInstance::apply_history_to_provinces( ProvinceHistoryManager const& history_manager, Date date, IdeologyManager const& ideology_manager, - IssueManager const& issue_manager, Country const& country + IssueManager const& issue_manager, CountryDefinition const& country ) { bool ret = true; diff --git a/src/openvic-simulation/map/MapInstance.hpp b/src/openvic-simulation/map/MapInstance.hpp index 353a3a4..2c0ff74 100644 --- a/src/openvic-simulation/map/MapInstance.hpp +++ b/src/openvic-simulation/map/MapInstance.hpp @@ -12,7 +12,7 @@ namespace OpenVic { struct ProvinceHistoryManager; struct IdeologyManager; struct IssueManager; - struct Country; + struct CountryDefinition; /* REQUIREMENTS: * MAP-4 @@ -47,7 +47,7 @@ namespace OpenVic { bool setup(BuildingTypeManager const& building_type_manager); bool apply_history_to_provinces( ProvinceHistoryManager const& history_manager, Date date, IdeologyManager const& ideology_manager, - IssueManager const& issue_manager, Country const& country + IssueManager const& issue_manager, CountryDefinition const& country ); void update_gamestate(Date today); diff --git a/src/openvic-simulation/map/Mapmode.cpp b/src/openvic-simulation/map/Mapmode.cpp index 410ea2b..f03b0e8 100644 --- a/src/openvic-simulation/map/Mapmode.cpp +++ b/src/openvic-simulation/map/Mapmode.cpp @@ -2,7 +2,7 @@ #include -#include "openvic-simulation/country/Country.hpp" +#include "openvic-simulation/country/CountryDefinition.hpp" #include "openvic-simulation/map/MapDefinition.hpp" #include "openvic-simulation/map/MapInstance.hpp" #include "openvic-simulation/map/ProvinceDefinition.hpp" diff --git a/src/openvic-simulation/map/ProvinceInstance.cpp b/src/openvic-simulation/map/ProvinceInstance.cpp index 2a0863d..967d72b 100644 --- a/src/openvic-simulation/map/ProvinceInstance.cpp +++ b/src/openvic-simulation/map/ProvinceInstance.cpp @@ -1,6 +1,6 @@ #include "ProvinceInstance.hpp" -#include "openvic-simulation/country/Country.hpp" +#include "openvic-simulation/country/CountryDefinition.hpp" #include "openvic-simulation/history/ProvinceHistory.hpp" #include "openvic-simulation/map/ProvinceDefinition.hpp" #include "openvic-simulation/military/UnitInstance.hpp" @@ -176,7 +176,7 @@ bool ProvinceInstance::apply_history_to_province(ProvinceHistoryEntry const* ent if (entry->get_owner()) owner = *entry->get_owner(); if (entry->get_controller()) controller = *entry->get_controller(); if (entry->get_slave()) slave = *entry->get_slave(); - for (Country const* core : entry->get_remove_cores()) { + for (CountryDefinition const* core : entry->get_remove_cores()) { const typename decltype(cores)::iterator existing_core = std::find(cores.begin(), cores.end(), core); if (existing_core != cores.end()) { cores.erase(existing_core); @@ -186,7 +186,7 @@ bool ProvinceInstance::apply_history_to_province(ProvinceHistoryEntry const* ent ); } } - for (Country const* core : entry->get_add_cores()) { + for (CountryDefinition const* core : entry->get_add_cores()) { const typename decltype(cores)::iterator existing_core = std::find(cores.begin(), cores.end(), core); if (existing_core == cores.end()) { cores.push_back(core); @@ -215,7 +215,7 @@ bool ProvinceInstance::apply_history_to_province(ProvinceHistoryEntry const* ent } void ProvinceInstance::setup_pop_test_values( - IdeologyManager const& ideology_manager, IssueManager const& issue_manager, Country const& country + IdeologyManager const& ideology_manager, IssueManager const& issue_manager, CountryDefinition const& country ) { for (Pop& pop : pops) { pop.setup_pop_test_values(ideology_manager, issue_manager, country); diff --git a/src/openvic-simulation/map/ProvinceInstance.hpp b/src/openvic-simulation/map/ProvinceInstance.hpp index 67ce423..8e8ec93 100644 --- a/src/openvic-simulation/map/ProvinceInstance.hpp +++ b/src/openvic-simulation/map/ProvinceInstance.hpp @@ -11,7 +11,7 @@ namespace OpenVic { struct ProvinceDefinition; struct TerrainType; struct State; - struct Country; + struct CountryDefinition; struct Crime; struct GoodDefinition; struct ArmyInstance; @@ -31,16 +31,17 @@ namespace OpenVic { enum struct colony_status_t : uint8_t { STATE, PROTECTORATE, COLONY }; + private: ProvinceDefinition const& PROPERTY(province_definition); - /* Mutable attributes (reset before loading history) */ TerrainType const* PROPERTY(terrain_type); life_rating_t PROPERTY(life_rating); colony_status_t PROPERTY(colony_status); State const* PROPERTY_RW(state); - Country const* PROPERTY(owner); - Country const* PROPERTY(controller); - std::vector PROPERTY(cores); + CountryDefinition const* PROPERTY(owner); + CountryDefinition const* PROPERTY(controller); + // Cores being CountryDefinitions means then they won't be affected by tag switched (as desired) + std::vector PROPERTY(cores); bool PROPERTY(slave); Crime const* PROPERTY_RW(crime); // TODO - change this into a factory-like structure @@ -86,7 +87,7 @@ namespace OpenVic { bool apply_history_to_province(ProvinceHistoryEntry const* entry); void setup_pop_test_values( - IdeologyManager const& ideology_manager, IssueManager const& issue_manager, Country const& country + IdeologyManager const& ideology_manager, IssueManager const& issue_manager, CountryDefinition const& country ); }; } diff --git a/src/openvic-simulation/map/State.cpp b/src/openvic-simulation/map/State.cpp index 46ff11d..42d84cc 100644 --- a/src/openvic-simulation/map/State.cpp +++ b/src/openvic-simulation/map/State.cpp @@ -1,6 +1,5 @@ #include "State.hpp" -#include "openvic-simulation/country/Country.hpp" #include "openvic-simulation/map/MapDefinition.hpp" #include "openvic-simulation/map/MapInstance.hpp" #include "openvic-simulation/map/ProvinceInstance.hpp" @@ -9,8 +8,8 @@ using namespace OpenVic; State::State( - StateSet const& new_state_set, Country const* owner, ProvinceInstance* capital, std::vector&& provinces, - ProvinceInstance::colony_status_t colony_status + StateSet const& new_state_set, CountryDefinition const* owner, ProvinceInstance* capital, + std::vector&& provinces, ProvinceInstance::colony_status_t colony_status ) : state_set { new_state_set }, owner { owner }, capital { capital }, provinces { std::move(provinces) }, colony_status { colony_status } {} diff --git a/src/openvic-simulation/map/State.hpp b/src/openvic-simulation/map/State.hpp index ff8acfa..6111668 100644 --- a/src/openvic-simulation/map/State.hpp +++ b/src/openvic-simulation/map/State.hpp @@ -9,7 +9,7 @@ namespace OpenVic { struct StateManager; struct StateSet; - struct Country; + struct CountryDefinition; struct ProvinceInstance; struct State { @@ -17,7 +17,7 @@ namespace OpenVic { private: StateSet const& PROPERTY(state_set); - Country const* PROPERTY(owner); + CountryDefinition const* PROPERTY(owner); ProvinceInstance* PROPERTY(capital); std::vector PROPERTY(provinces); ProvinceInstance::colony_status_t PROPERTY(colony_status); @@ -25,7 +25,7 @@ namespace OpenVic { Pop::pop_size_t PROPERTY(total_population); State( - StateSet const& new_state_set, Country const* owner, ProvinceInstance* capital, + StateSet const& new_state_set, CountryDefinition const* owner, ProvinceInstance* capital, std::vector&& provinces, ProvinceInstance::colony_status_t colony_status ); -- cgit v1.2.3-56-ga3b1 From 45d66d887983177612d7cb8e715d5b28c1f87f31 Mon Sep 17 00:00:00 2001 From: hop311 Date: Thu, 27 Jun 2024 20:28:34 +0100 Subject: Use minimal PopBase for pop history --- src/openvic-simulation/history/ProvinceHistory.cpp | 2 +- src/openvic-simulation/history/ProvinceHistory.hpp | 4 +- src/openvic-simulation/map/ProvinceInstance.cpp | 10 ++-- src/openvic-simulation/map/ProvinceInstance.hpp | 4 +- src/openvic-simulation/pop/Pop.cpp | 38 ++++++++-------- src/openvic-simulation/pop/Pop.hpp | 53 ++++++++++++---------- 6 files changed, 58 insertions(+), 53 deletions(-) (limited to 'src/openvic-simulation/map') diff --git a/src/openvic-simulation/history/ProvinceHistory.cpp b/src/openvic-simulation/history/ProvinceHistory.cpp index f2291e8..1fa6e90 100644 --- a/src/openvic-simulation/history/ProvinceHistory.cpp +++ b/src/openvic-simulation/history/ProvinceHistory.cpp @@ -214,7 +214,7 @@ bool ProvinceHistoryEntry::_load_province_pop_history( return pop_manager.expect_pop_type_dictionary_reserve_length( pops, [this, &pop_manager, &rebel_manager, non_integer_size](PopType const& pop_type, ast::NodeCPtr pop_node) -> bool { - return pop_manager.load_pop_into_vector(rebel_manager, pops, pop_type, pop_node, non_integer_size); + return pop_manager.load_pop_bases_into_vector(rebel_manager, pops, pop_type, pop_node, non_integer_size); } )(root); } diff --git a/src/openvic-simulation/history/ProvinceHistory.hpp b/src/openvic-simulation/history/ProvinceHistory.hpp index d6bf150..85853d7 100644 --- a/src/openvic-simulation/history/ProvinceHistory.hpp +++ b/src/openvic-simulation/history/ProvinceHistory.hpp @@ -39,9 +39,7 @@ namespace OpenVic { ordered_map PROPERTY(province_buildings); ordered_map PROPERTY(state_buildings); fixed_point_map_t PROPERTY(party_loyalties); - - // TODO - use minimal pop representation (size, type, culture, religion, consciousness, militancy, rebel type) - std::vector PROPERTY(pops); + std::vector PROPERTY(pops); ProvinceHistoryEntry(ProvinceDefinition const& new_province, Date new_date); diff --git a/src/openvic-simulation/map/ProvinceInstance.cpp b/src/openvic-simulation/map/ProvinceInstance.cpp index 967d72b..61b1527 100644 --- a/src/openvic-simulation/map/ProvinceInstance.cpp +++ b/src/openvic-simulation/map/ProvinceInstance.cpp @@ -39,8 +39,8 @@ bool ProvinceInstance::expand_building(size_t building_index) { return building->expand(); } -void ProvinceInstance::_add_pop(Pop pop) { - pop.set_location(this); +void ProvinceInstance::_add_pop(Pop&& pop) { + pop.set_location(*this); pops.push_back(std::move(pop)); } @@ -54,11 +54,11 @@ bool ProvinceInstance::add_pop(Pop&& pop) { } } -bool ProvinceInstance::add_pop_vec(std::vector const& pop_vec) { +bool ProvinceInstance::add_pop_vec(std::vector const& pop_vec) { if (!province_definition.is_water()) { reserve_more(pops, pop_vec.size()); - for (Pop const& pop : pop_vec) { - _add_pop(pop); + for (PopBase const& pop : pop_vec) { + _add_pop(Pop { pop }); } return true; } else { diff --git a/src/openvic-simulation/map/ProvinceInstance.hpp b/src/openvic-simulation/map/ProvinceInstance.hpp index 8e8ec93..ca7f149 100644 --- a/src/openvic-simulation/map/ProvinceInstance.hpp +++ b/src/openvic-simulation/map/ProvinceInstance.hpp @@ -59,7 +59,7 @@ namespace OpenVic { ProvinceInstance(ProvinceDefinition const& new_province_definition); - void _add_pop(Pop pop); + void _add_pop(Pop&& pop); void _update_pops(); public: @@ -72,7 +72,7 @@ namespace OpenVic { bool expand_building(size_t building_index); bool add_pop(Pop&& pop); - bool add_pop_vec(std::vector const& pop_vec); + bool add_pop_vec(std::vector const& pop_vec); size_t get_pop_count() const; void update_gamestate(Date today); diff --git a/src/openvic-simulation/pop/Pop.cpp b/src/openvic-simulation/pop/Pop.cpp index 4f8bdcb..8f4c445 100644 --- a/src/openvic-simulation/pop/Pop.cpp +++ b/src/openvic-simulation/pop/Pop.cpp @@ -1,6 +1,7 @@ #include "Pop.hpp" #include "openvic-simulation/country/CountryDefinition.hpp" +#include "openvic-simulation/map/ProvinceInstance.hpp" #include "openvic-simulation/military/UnitType.hpp" #include "openvic-simulation/politics/Ideology.hpp" #include "openvic-simulation/politics/Issue.hpp" @@ -12,18 +13,14 @@ using namespace OpenVic::NodeTools; using enum PopType::income_type_t; -Pop::Pop( - 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 }, +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 }, + consciousness { new_consciousness }, rebel_type { new_rebel_type } {} + +Pop::Pop(PopBase const& pop_base) + : PopBase { pop_base }, location { nullptr }, total_change { 0 }, num_grown { 0 }, @@ -32,9 +29,6 @@ Pop::Pop( num_migrated_internal { 0 }, num_migrated_external { 0 }, num_migrated_colonial { 0 }, - militancy { new_militancy }, - consciousness { new_consciousness }, - rebel_type { new_rebel_type }, ideologies {}, issues {}, votes {}, @@ -117,6 +111,14 @@ void Pop::setup_pop_test_values( luxury_needs_fulfilled = test_range(); } +void Pop::set_location(ProvinceInstance const& new_location) { + if (location != &new_location) { + location = &new_location; + + // TODO - update location dependent attributes + } +} + Strata::Strata(std::string_view new_identifier) : HasIdentifier { new_identifier } {} PopType::PopType( @@ -596,8 +598,8 @@ bool PopManager::load_pop_type_chances_file(ast::NodeCPtr root) { )(root); } -bool PopManager::load_pop_into_vector( - RebelManager const& rebel_manager, std::vector& vec, PopType const& type, ast::NodeCPtr pop_node, +bool PopManager::load_pop_bases_into_vector( + RebelManager const& rebel_manager, std::vector& vec, PopType const& type, ast::NodeCPtr pop_node, bool *non_integer_size ) const { Culture const* culture = nullptr; @@ -620,7 +622,7 @@ bool PopManager::load_pop_into_vector( } if (culture != nullptr && religion != nullptr && size >= 1) { - vec.emplace_back(Pop { type, *culture, *religion, size.to_int64_t(), militancy, consciousness, rebel_type }); + vec.emplace_back(PopBase { type, *culture, *religion, size.to_int64_t(), militancy, consciousness, rebel_type }); } else { Logger::warning( "Some pop arguments are invalid: culture = ", culture, ", religion = ", religion, ", size = ", size diff --git a/src/openvic-simulation/pop/Pop.hpp b/src/openvic-simulation/pop/Pop.hpp index b069f02..8ac6d4c 100644 --- a/src/openvic-simulation/pop/Pop.hpp +++ b/src/openvic-simulation/pop/Pop.hpp @@ -26,22 +26,36 @@ namespace OpenVic { struct ProvinceInstance; struct CountryParty; - /* REQUIREMENTS: - * POP-18, POP-19, POP-20, POP-21, POP-34, POP-35, POP-36, POP-37 - */ - struct Pop { + struct PopBase { friend struct PopManager; using pop_size_t = int64_t; + 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); + fixed_point_t PROPERTY_ACCESS(militancy, protected); + fixed_point_t PROPERTY_ACCESS(consciousness, protected); + RebelType const* PROPERTY_ACCESS(rebel_type, protected); + + 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 + ); + }; + + /* REQUIREMENTS: + * POP-18, POP-19, POP-20, POP-21, POP-34, POP-35, POP-36, POP-37 + */ + struct Pop : PopBase { + friend struct ProvinceInstance; + static constexpr pop_size_t MAX_SIZE = std::numeric_limits::max(); private: - PopType const& PROPERTY(type); - Culture const& PROPERTY(culture); - Religion const& PROPERTY(religion); - pop_size_t PROPERTY(size); - ProvinceInstance const* PROPERTY_RW(location); + ProvinceInstance const* PROPERTY(location); /* Last day's size change by source. */ pop_size_t PROPERTY(total_change); @@ -52,10 +66,7 @@ namespace OpenVic { pop_size_t PROPERTY(num_migrated_external); pop_size_t PROPERTY(num_migrated_colonial); - fixed_point_t PROPERTY(militancy); - fixed_point_t PROPERTY(consciousness); fixed_point_t PROPERTY(literacy); - RebelType const* PROPERTY(rebel_type); fixed_point_map_t PROPERTY(ideologies); fixed_point_map_t PROPERTY(issues); @@ -70,18 +81,10 @@ namespace OpenVic { fixed_point_t PROPERTY(everyday_needs_fulfilled); fixed_point_t PROPERTY(luxury_needs_fulfilled); - Pop( - 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 - ); + Pop(PopBase const& pop_base); public: - Pop(Pop const&) = default; + Pop(Pop const&) = delete; Pop(Pop&&) = default; Pop& operator=(Pop const&) = delete; Pop& operator=(Pop&&) = delete; @@ -89,6 +92,8 @@ namespace OpenVic { void setup_pop_test_values( IdeologyManager const& ideology_manager, IssueManager const& issue_manager, CountryDefinition const& country ); + + void set_location(ProvinceInstance const& new_location); }; struct Strata : HasIdentifier { @@ -319,8 +324,8 @@ namespace OpenVic { bool load_pop_type_chances_file(ast::NodeCPtr root); - bool load_pop_into_vector( - RebelManager const& rebel_manager, std::vector& vec, PopType const& type, ast::NodeCPtr pop_node, + bool load_pop_bases_into_vector( + RebelManager const& rebel_manager, std::vector& vec, PopType const& type, ast::NodeCPtr pop_node, bool *non_integer_size ) const; -- cgit v1.2.3-56-ga3b1