diff options
Diffstat (limited to 'src/openvic-simulation/map')
-rw-r--r-- | src/openvic-simulation/map/Province.cpp | 54 | ||||
-rw-r--r-- | src/openvic-simulation/map/Province.hpp | 14 |
2 files changed, 68 insertions, 0 deletions
diff --git a/src/openvic-simulation/map/Province.cpp b/src/openvic-simulation/map/Province.cpp index 77bf33f..099ba9b 100644 --- a/src/openvic-simulation/map/Province.cpp +++ b/src/openvic-simulation/map/Province.cpp @@ -1,5 +1,7 @@ #include "Province.hpp" +#include "openvic-simulation/history/ProvinceHistory.hpp" + using namespace OpenVic; using namespace OpenVic::NodeTools; @@ -42,6 +44,22 @@ Province::colony_status_t Province::get_colony_status() const { return colony_status; } +Country const* Province::get_owner() const { + return owner; +} + +Country const* Province::get_controller() const { + return controller; +} + +std::vector<Country const*> const& Province::get_cores() const { + return cores; +} + +bool Province::is_slave() const { + return slave; +} + bool Province::load_positions(BuildingManager const& building_manager, ast::NodeCPtr root) { return expect_dictionary_keys( "text_position", ZERO_OR_ONE, expect_fvec2(assign_variable_callback(positions.text)), @@ -204,3 +222,39 @@ std::vector<Province::adjacency_t> const& Province::get_adjacencies() const { void Province::_set_terrain_type(TerrainType const* type) { terrain_type = type; } + +void Province::apply_history_to_province(ProvinceHistoryMap const& history, Date date) { + auto entries = history.get_entries(date); + + reset_buildings(); + + for (const auto& entry : entries) { + if (entry->get_life_rating()) life_rating = *entry->get_life_rating(); + if (entry->get_colonial()) colony_status = *entry->get_colonial(); + if (entry->get_rgo()) rgo = *entry->get_rgo(); + if (entry->get_terrain_type()) terrain_type = *entry->get_terrain_type(); + 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 (const auto& core : entry->get_remove_cores()) { + const auto existing_core = std::find(cores.begin(), cores.end(), core); + if (existing_core != cores.end()) cores.erase(existing_core); + } + for (const auto& core : entry->get_add_cores()) { + const auto existing_core = std::find(cores.begin(), cores.end(), core); + if (existing_core == cores.end()) cores.push_back(core); + } + // TODO: rework province buildings + for (const auto& building : entry->get_buildings()) { + BuildingInstance* existing_entry = buildings.get_item_by_identifier(building.first->get_identifier()); + if (existing_entry != nullptr) { + existing_entry->set_level(building.second); + } else { + BuildingInstance instance = { *building.first }; + instance.set_level(building.second); + add_building(std::move(instance)); + } + } + // TODO: party loyalties for each POP when implemented on POP side + } +} diff --git a/src/openvic-simulation/map/Province.hpp b/src/openvic-simulation/map/Province.hpp index 2fd15c9..eda05fb 100644 --- a/src/openvic-simulation/map/Province.hpp +++ b/src/openvic-simulation/map/Province.hpp @@ -5,6 +5,7 @@ #include "openvic-simulation/economy/Building.hpp" #include "openvic-simulation/politics/Ideology.hpp" #include "openvic-simulation/pop/Pop.hpp" +#include "openvic-simulation/country/Country.hpp" namespace OpenVic { struct Map; @@ -12,6 +13,7 @@ namespace OpenVic { struct Good; struct TerrainType; struct TerrainTypeMapping; + struct ProvinceHistoryMap; /* REQUIREMENTS: * MAP-5, MAP-7, MAP-8, MAP-43, MAP-47 @@ -85,6 +87,11 @@ namespace OpenVic { void _set_terrain_type(TerrainType const* type); + Country const* owner = nullptr; + Country const* controller = nullptr; + std::vector<Country const*> cores; + bool slave = false; + Province(std::string_view new_identifier, colour_t new_colour, index_t new_index); public: @@ -121,5 +128,12 @@ namespace OpenVic { bool is_adjacent_to(Province const* province); bool add_adjacency(Province const* province, distance_t distance, flags_t flags); std::vector<adjacency_t> const& get_adjacencies() const; + + Country const* get_owner() const; + Country const* get_controller() const; + std::vector<Country const*> const& get_cores() const; + bool is_slave() const; + + void apply_history_to_province(ProvinceHistoryMap const& history, Date date); }; } |