From ea9b695022d197d918f1bb4292a0f424018dad37 Mon Sep 17 00:00:00 2001 From: wvpm <24685035+wvpm@users.noreply.github.com> Date: Sun, 22 Sep 2024 10:48:18 +0200 Subject: Map province history rgo to production type for province instance --- src/openvic-simulation/map/MapInstance.cpp | 5 +++-- src/openvic-simulation/map/MapInstance.hpp | 3 ++- src/openvic-simulation/map/Mapmode.cpp | 2 +- src/openvic-simulation/map/ProvinceInstance.cpp | 26 ++++++++++++++++++++++--- src/openvic-simulation/map/ProvinceInstance.hpp | 19 ++++++++++++++---- 5 files changed, 44 insertions(+), 11 deletions(-) (limited to 'src/openvic-simulation/map') diff --git a/src/openvic-simulation/map/MapInstance.cpp b/src/openvic-simulation/map/MapInstance.cpp index 0ce8cea..7c529bc 100644 --- a/src/openvic-simulation/map/MapInstance.cpp +++ b/src/openvic-simulation/map/MapInstance.cpp @@ -3,6 +3,7 @@ #include "openvic-simulation/history/ProvinceHistory.hpp" #include "openvic-simulation/map/MapDefinition.hpp" #include "openvic-simulation/utility/Logger.hpp" +#include "economy/production/ProductionType.hpp" using namespace OpenVic; @@ -82,7 +83,7 @@ bool MapInstance::setup( bool MapInstance::apply_history_to_provinces( ProvinceHistoryManager const& history_manager, Date date, CountryInstanceManager& country_manager, - IssueManager const& issue_manager + IssueManager const& issue_manager, ProductionTypeManager const& production_type_manager ) { bool ret = true; @@ -99,7 +100,7 @@ bool MapInstance::apply_history_to_provinces( break; } - province.apply_history_to_province(*entry, country_manager); + province.apply_history_to_province(*entry, country_manager, production_type_manager); if (!entry->get_pops().empty()) { pop_history_entry = entry.get(); diff --git a/src/openvic-simulation/map/MapInstance.hpp b/src/openvic-simulation/map/MapInstance.hpp index 99c13d3..22a564f 100644 --- a/src/openvic-simulation/map/MapInstance.hpp +++ b/src/openvic-simulation/map/MapInstance.hpp @@ -5,6 +5,7 @@ #include "openvic-simulation/map/State.hpp" #include "openvic-simulation/types/Date.hpp" #include "openvic-simulation/types/IdentifierRegistry.hpp" +#include "economy/production/ProductionType.hpp" namespace OpenVic { struct MapDefinition; @@ -49,7 +50,7 @@ namespace OpenVic { ); bool apply_history_to_provinces( ProvinceHistoryManager const& history_manager, Date date, CountryInstanceManager& country_manager, - IssueManager const& issue_manager + IssueManager const& issue_manager, ProductionTypeManager const& production_type_manager ); void update_gamestate(Date today, DefineManager const& define_manager); diff --git a/src/openvic-simulation/map/Mapmode.cpp b/src/openvic-simulation/map/Mapmode.cpp index f951a05..88eb2eb 100644 --- a/src/openvic-simulation/map/Mapmode.cpp +++ b/src/openvic-simulation/map/Mapmode.cpp @@ -179,7 +179,7 @@ bool MapmodeManager::setup_mapmodes() { "mapmode_terrain_type", get_colour_mapmode(&ProvinceInstance::get_terrain_type) }, { - "mapmode_rgo", get_colour_mapmode(&ProvinceInstance::get_rgo) + "mapmode_rgo", get_colour_mapmode(&ProvinceInstance::get_rgo_good) }, { "mapmode_infrastructure", diff --git a/src/openvic-simulation/map/ProvinceInstance.cpp b/src/openvic-simulation/map/ProvinceInstance.cpp index 06b3f1e..1d69fec 100644 --- a/src/openvic-simulation/map/ProvinceInstance.cpp +++ b/src/openvic-simulation/map/ProvinceInstance.cpp @@ -1,6 +1,8 @@ #include "ProvinceInstance.hpp" #include "openvic-simulation/country/CountryInstance.hpp" +#include "openvic-simulation/economy/GoodDefinition.hpp" +#include "openvic-simulation/economy/production/ProductionType.hpp" #include "openvic-simulation/history/ProvinceHistory.hpp" #include "openvic-simulation/map/ProvinceDefinition.hpp" #include "openvic-simulation/military/UnitInstanceGroup.hpp" @@ -23,7 +25,7 @@ ProvinceInstance::ProvinceInstance( cores {}, slave { false }, crime { nullptr }, - rgo { nullptr }, + rgo_production_type { nullptr }, buildings { "buildings", false }, armies {}, navies {}, @@ -255,7 +257,7 @@ bool ProvinceInstance::setup(BuildingTypeManager const& building_type_manager) { return ret; } -bool ProvinceInstance::apply_history_to_province(ProvinceHistoryEntry const& entry, CountryInstanceManager& country_manager) { +bool ProvinceInstance::apply_history_to_province(ProvinceHistoryEntry const& entry, CountryInstanceManager& country_manager, ProductionTypeManager const& production_type_manager) { bool ret = true; constexpr auto set_optional = [](T& target, std::optional const& source) { @@ -279,7 +281,25 @@ bool ProvinceInstance::apply_history_to_province(ProvinceHistoryEntry const& ent ret &= remove_core(country_manager.get_country_instance_from_definition(*country)); } } - set_optional(rgo, entry.get_rgo()); + + auto const& rgo_good_optional = entry.get_rgo(); + if(rgo_good_optional.has_value()) { + GoodDefinition const* const rgo_good = rgo_good_optional.value(); + if(rgo_good != nullptr) { + IndexedMap const& good_to_rgo_production_type = production_type_manager.get_good_to_rgo_production_type(); + ProductionType const* rgo_production_type = good_to_rgo_production_type[*rgo_good]; + if(rgo_production_type!= nullptr) { + set_rgo_production_type(rgo_production_type); + } + else { + //error we expect the good to have an rgo production type but there is none + //Victoria 2 treats this as null, but clearly the modder wanted there to be a good + } + } + //else explicitly set null, no-op + } + //else default null, no-op + set_optional(life_rating, entry.get_life_rating()); set_optional(terrain_type, entry.get_terrain_type()); for (auto const& [building, level] : entry.get_province_buildings()) { diff --git a/src/openvic-simulation/map/ProvinceInstance.hpp b/src/openvic-simulation/map/ProvinceInstance.hpp index fa0be98..9899a16 100644 --- a/src/openvic-simulation/map/ProvinceInstance.hpp +++ b/src/openvic-simulation/map/ProvinceInstance.hpp @@ -1,14 +1,18 @@ #pragma once +#include + #include #include "openvic-simulation/economy/BuildingInstance.hpp" +#include "openvic-simulation/economy/production/ProductionType.hpp" #include "openvic-simulation/military/UnitInstance.hpp" #include "openvic-simulation/military/UnitType.hpp" #include "openvic-simulation/pop/Pop.hpp" -#include "openvic-simulation/types/fixed_point/FixedPointMap.hpp" #include "openvic-simulation/types/HasIdentifier.hpp" #include "openvic-simulation/types/OrderedContainers.hpp" +#include "openvic-simulation/types/fixed_point/FixedPointMap.hpp" + namespace OpenVic { struct MapInstance; @@ -70,8 +74,7 @@ namespace OpenVic { bool PROPERTY(slave); Crime const* PROPERTY_RW(crime); - // TODO - change this into a factory-like structure - GoodDefinition const* PROPERTY(rgo); + ProductionType const* PROPERTY_RW_ACCESS(rgo_production_type, public); IdentifierRegistry IDENTIFIER_REGISTRY(building); ordered_set PROPERTY(armies); ordered_set PROPERTY(navies); @@ -112,6 +115,14 @@ namespace OpenVic { return controller; } + GoodDefinition const* get_rgo_good() const { + GoodDefinition const* rgo_good { nullptr }; + if(rgo_production_type != nullptr) { + rgo_good = rgo_production_type->get_output_good(); + } + return rgo_good; + } + bool set_owner(CountryInstance* new_owner); bool set_controller(CountryInstance* new_controller); bool add_core(CountryInstance& new_core); @@ -133,7 +144,7 @@ namespace OpenVic { bool remove_unit_instance_group(UnitInstanceGroup& group); bool setup(BuildingTypeManager const& building_type_manager); - bool apply_history_to_province(ProvinceHistoryEntry const& entry, CountryInstanceManager& country_manager); + bool apply_history_to_province(ProvinceHistoryEntry const& entry, CountryInstanceManager& country_manager, ProductionTypeManager const& production_type_manager); void setup_pop_test_values(IssueManager const& issue_manager); }; -- cgit v1.2.3-56-ga3b1