#pragma once #include #include #include #include "openvic-simulation/country/Country.hpp" #include "openvic-simulation/economy/Building.hpp" #include "openvic-simulation/economy/Good.hpp" #include "openvic-simulation/history/Bookmark.hpp" #include "openvic-simulation/history/HistoryMap.hpp" #include "openvic-simulation/map/Province.hpp" #include "openvic-simulation/map/TerrainType.hpp" namespace OpenVic { struct ProvinceHistoryMap; struct ProvinceHistoryEntry : HistoryEntry { friend struct ProvinceHistoryMap; private: Province const& PROPERTY(province); std::optional PROPERTY(owner); std::optional PROPERTY(controller); std::optional PROPERTY(colonial); std::optional PROPERTY(slave); std::vector PROPERTY(add_cores); std::vector PROPERTY(remove_cores); std::optional PROPERTY(rgo); std::optional PROPERTY(life_rating); std::optional PROPERTY(terrain_type); std::map PROPERTY(province_buildings); std::map PROPERTY(state_buildings); fixed_point_map_t PROPERTY(party_loyalties); ProvinceHistoryEntry(Province const& new_province, Date new_date); }; struct ProvinceHistoryManager; struct ProvinceHistoryMap : HistoryMap { friend struct ProvinceHistoryManager; private: Province const& PROPERTY(province); protected: ProvinceHistoryMap(Province const& new_province); std::unique_ptr _make_entry(Date date) const override; bool _load_history_entry(GameManager const& game_manager, ProvinceHistoryEntry& entry, ast::NodeCPtr root) override; }; struct ProvinceHistoryManager { private: std::map PROPERTY(province_histories); bool locked = false; public: ProvinceHistoryManager() = default; void lock_province_histories(Map const& map, bool detailed_errors); bool is_locked() const; ProvinceHistoryMap const* get_province_history(Province const* province) const; bool load_province_history_file(GameManager const& game_manager, Province const& province, ast::NodeCPtr root); }; } // namespace OpenVic