From 17697f6216159f6a89dd8d64a22de0262dcf2aef Mon Sep 17 00:00:00 2001 From: BrickPi <49528459+BrickPi@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:18:31 -0500 Subject: Implement Province History Loading --- src/openvic-simulation/history/ProvinceHistory.hpp | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/openvic-simulation/history/ProvinceHistory.hpp (limited to 'src/openvic-simulation/history/ProvinceHistory.hpp') diff --git a/src/openvic-simulation/history/ProvinceHistory.hpp b/src/openvic-simulation/history/ProvinceHistory.hpp new file mode 100644 index 0000000..4094403 --- /dev/null +++ b/src/openvic-simulation/history/ProvinceHistory.hpp @@ -0,0 +1,88 @@ +#pragma once + +#include +#include + +#include "openvic-simulation/map/Province.hpp" +#include "openvic-simulation/map/TerrainType.hpp" +#include "openvic-simulation/country/Country.hpp" +#include "openvic-simulation/economy/Good.hpp" +#include "openvic-simulation/economy/Building.hpp" +#include "openvic-simulation/history/Bookmark.hpp" + +namespace OpenVic { + struct ProvinceHistoryManager; + + struct ProvinceHistory { + friend struct ProvinceHistoryManager; + + private: + Country const* owner; + Country const* controller; + std::vector cores; + Good const* rgo; + uint8_t life_rating; + TerrainType const* terrain_type; + std::map buildings; + std::map party_loyalties; + + ProvinceHistory( + Country const* new_owner, + Country const* new_controller, + std::vector&& new_cores, + Good const* new_rgo, + uint8_t new_life_rating, + TerrainType const* new_terrain_type, + std::map&& new_buildings, + std::map&& new_party_loyalties + ); + + public: + Country const* get_owner() const; + Country const* get_controller() const; + const std::vector& get_cores() const; + bool is_core_of(Country const* country) const; + Good const* get_rgo() const; + uint8_t get_life_rating() const; + TerrainType const* get_terrain_type() const; + const std::map& get_buildings() const; + const std::map& get_party_loyalties() const; + }; + + struct ProvinceHistoryManager { + private: + std::map> province_histories; + bool locked = false; + + inline bool _load_province_history_entry(GameManager& game_manager, std::string_view province, Date const& date, ast::NodeCPtr root); + + public: + ProvinceHistoryManager() {} + + bool add_province_history_entry( + Province const* province, + Date date, + Country const* owner, + Country const* controller, + std::vector&& cores, + Good const* rgo, + uint8_t life_rating, + TerrainType const* terrain_type, + std::map&& buildings, + std::map&& party_loyalties, + bool updated_cores, + bool updated_buildings, + bool updated_loyalties + ); + + void lock_province_histories(); + bool is_locked() const; + + /* Returns history of province at date, if date doesn't have an entry returns closest entry before date. Return can be nullptr if an error occurs. */ + ProvinceHistory const* get_province_history(Province const* province, Date entry) const; + /* Returns history of province at bookmark date. Return can be nullptr if an error occurs. */ + inline ProvinceHistory const* get_province_history(Province const* province, Bookmark const* bookmark) const; + + bool load_province_history_file(GameManager& game_manager, std::string_view name, ast::NodeCPtr root); + }; +} // namespace OpenVic -- cgit v1.2.3-56-ga3b1