aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/map')
-rw-r--r--src/openvic-simulation/map/Province.cpp54
-rw-r--r--src/openvic-simulation/map/Province.hpp14
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);
};
}