aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/dataloader/Dataloader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/dataloader/Dataloader.cpp')
-rw-r--r--src/openvic-simulation/dataloader/Dataloader.cpp222
1 files changed, 138 insertions, 84 deletions
diff --git a/src/openvic-simulation/dataloader/Dataloader.cpp b/src/openvic-simulation/dataloader/Dataloader.cpp
index cce766f..8d475a2 100644
--- a/src/openvic-simulation/dataloader/Dataloader.cpp
+++ b/src/openvic-simulation/dataloader/Dataloader.cpp
@@ -287,6 +287,9 @@ bool Dataloader::_load_interface_files(UIManager& ui_manager) const {
static const std::vector<std::string_view> gui_files {
"province_interface.gui", "topbar.gui"
};
+
+ ui_manager.reserve_more_scenes(gui_files.size());
+
for (std::string_view const& gui_file : gui_files) {
if (!ui_manager.load_gui_file(
gui_file, parse_defines(lookup_file(append_string_views(interface_directory, gui_file))).get_file_node()
@@ -307,8 +310,10 @@ bool Dataloader::_load_pop_types(GameManager& game_manager) {
IdeologyManager const& ideology_manager = game_manager.get_politics_manager().get_ideology_manager();
static constexpr std::string_view pop_type_directory = "poptypes";
+
const path_vector_t pop_type_files = lookup_files_in_dir(pop_type_directory, ".txt");
- pop_manager.reserve_pop_types(pop_type_files.size());
+
+ pop_manager.reserve_all_pop_types(pop_type_files.size());
bool ret = apply_to_files(
pop_type_files,
@@ -318,8 +323,8 @@ bool Dataloader::_load_pop_types(GameManager& game_manager) {
);
}
);
- pop_manager.lock_stratas();
- pop_manager.lock_pop_types();
+
+ pop_manager.lock_all_pop_types();
if (pop_manager.get_slave_sprite() <= 0) {
Logger::error("No slave pop type sprite found!");
@@ -343,8 +348,12 @@ bool Dataloader::_load_units(GameManager& game_manager) const {
UnitManager& unit_manager = game_manager.get_military_manager().get_unit_manager();
+ const path_vector_t unit_files = lookup_files_in_dir(units_directory, ".txt");
+
+ unit_manager.reserve_more_units(unit_files.size());
+
bool ret = apply_to_files(
- lookup_files_in_dir(units_directory, ".txt"),
+ unit_files,
[&game_manager, &unit_manager](fs::path const& file) -> bool {
return unit_manager.load_unit_file(
game_manager.get_economy_manager().get_good_manager(), parse_defines(file).get_file_node()
@@ -481,112 +490,152 @@ bool Dataloader::_load_decisions(GameManager& game_manager) {
bool Dataloader::_load_history(GameManager& game_manager, bool unused_history_file_warnings) const {
- /* Country History */
- static constexpr std::string_view country_history_directory = "history/countries";
- bool ret = apply_to_files(
- lookup_basic_indentifier_prefixed_files_in_dir(country_history_directory, ".txt"),
- [this, &game_manager, unused_history_file_warnings](fs::path const& file) -> bool {
- const std::string filename = file.stem().string();
- const std::string_view country_id = extract_basic_identifier_prefix(filename);
-
- Country const* country = game_manager.get_country_manager().get_country_by_identifier(country_id);
- if (country == nullptr) {
- if (unused_history_file_warnings) {
- Logger::warning("Found history file for non-existent country: ", country_id);
+ bool ret = true;
+
+ {
+ /* Country History */
+ CountryHistoryManager& country_history_manager = game_manager.get_history_manager().get_country_manager();
+
+ static constexpr std::string_view country_history_directory = "history/countries";
+ const path_vector_t country_history_files =
+ lookup_basic_indentifier_prefixed_files_in_dir(country_history_directory, ".txt");
+
+ country_history_manager.reserve_more_country_histories(country_history_files.size());
+
+ ret &= apply_to_files(
+ country_history_files,
+ [this, &game_manager, &country_history_manager, unused_history_file_warnings](fs::path const& file) -> bool {
+ const std::string filename = file.stem().string();
+ const std::string_view country_id = extract_basic_identifier_prefix(filename);
+
+ Country const* country = game_manager.get_country_manager().get_country_by_identifier(country_id);
+ if (country == nullptr) {
+ if (unused_history_file_warnings) {
+ Logger::warning("Found history file for non-existent country: ", country_id);
+ }
+ return true;
}
- return true;
+
+ return country_history_manager.load_country_history_file(
+ game_manager, *this, *country, parse_defines(file).get_file_node()
+ );
}
+ );
- return game_manager.get_history_manager().get_country_manager().load_country_history_file(
- game_manager, *this, *country, parse_defines(file).get_file_node()
- );
- }
- );
- game_manager.get_history_manager().get_country_manager().lock_country_histories();
+ country_history_manager.lock_country_histories();
+ }
{
DeploymentManager& deployment_manager = game_manager.get_military_manager().get_deployment_manager();
+
deployment_manager.lock_deployments();
+
if (deployment_manager.get_missing_oob_file_count() > 0) {
Logger::warning(deployment_manager.get_missing_oob_file_count(), " missing OOB files!");
}
}
- /* Province History */
- static constexpr std::string_view province_history_directory = "history/provinces";
- ret &= apply_to_files(
- lookup_basic_indentifier_prefixed_files_in_dir_recursive(province_history_directory, ".txt"),
- [this, &game_manager, unused_history_file_warnings](fs::path const& file) -> bool {
- const std::string filename = file.stem().string();
- const std::string_view province_id = extract_basic_identifier_prefix(filename);
-
- Province const* province = game_manager.get_map().get_province_by_identifier(province_id);
- if (province == nullptr) {
- if (unused_history_file_warnings) {
- Logger::warning("Found history file for non-existent province: ", province_id);
+ {
+ /* Province History */
+ ProvinceHistoryManager& province_history_manager = game_manager.get_history_manager().get_province_manager();
+ Map const& map = game_manager.get_map();
+
+ static constexpr std::string_view province_history_directory = "history/provinces";
+ const path_vector_t province_history_files =
+ lookup_basic_indentifier_prefixed_files_in_dir_recursive(province_history_directory, ".txt");
+
+ province_history_manager.reserve_more_province_histories(province_history_files.size());
+
+ ret &= apply_to_files(
+ province_history_files,
+ [this, &game_manager, &province_history_manager, &map, unused_history_file_warnings](fs::path const& file) -> bool {
+ const std::string filename = file.stem().string();
+ const std::string_view province_id = extract_basic_identifier_prefix(filename);
+
+ Province const* province = map.get_province_by_identifier(province_id);
+ if (province == nullptr) {
+ if (unused_history_file_warnings) {
+ Logger::warning("Found history file for non-existent province: ", province_id);
+ }
+ return true;
}
- return true;
+
+ return province_history_manager.load_province_history_file(
+ game_manager, *province, parse_defines(file).get_file_node()
+ );
}
+ );
- return game_manager.get_history_manager().get_province_manager().load_province_history_file(
- game_manager, *province, parse_defines(file).get_file_node()
- );
- }
- );
+ /* Pop History */
+ static constexpr std::string_view pop_history_directory = "history/pops/";
+
+ const string_set_t pop_history_dirs = lookup_dirs_in_dir(pop_history_directory);
+ const Date last_bookmark_date = game_manager.get_history_manager().get_bookmark_manager().get_last_bookmark_date();
+
+ for (std::string const& dir : pop_history_dirs) {
+ bool successful = false;
+ const Date date = Date::from_string(dir, &successful);
+
+ if (successful && date <= last_bookmark_date) {
+ bool non_integer_size = false;
+
+ ret &= apply_to_files(
+ lookup_files_in_dir(StringUtils::append_string_views(pop_history_directory, dir), ".txt"),
+ [this, &game_manager, &province_history_manager, date, &non_integer_size](fs::path const& file) -> bool {
+ return province_history_manager.load_pop_history_file(
+ game_manager, date, parse_defines(file).get_file_node(), &non_integer_size
+ );
+ }
+ );
- /* Pop History */
- static constexpr std::string_view pop_history_directory = "history/pops/";
- const string_set_t pop_history_dirs = lookup_dirs_in_dir(pop_history_directory);
- const Date last_bookmark_date = game_manager.get_history_manager().get_bookmark_manager().get_last_bookmark_date();
- for (std::string const& dir : pop_history_dirs) {
- bool successful = false;
- const Date date = Date::from_string(dir, &successful);
- if (successful && date <= last_bookmark_date) {
- bool non_integer_size = false;
- ret &= apply_to_files(
- lookup_files_in_dir(StringUtils::append_string_views(pop_history_directory, dir), ".txt"),
- [this, &game_manager, date, &non_integer_size](fs::path const& file) -> bool {
- return game_manager.get_history_manager().get_province_manager().load_pop_history_file(
- game_manager, date, parse_defines(file).get_file_node(), &non_integer_size
- );
+ if (non_integer_size) {
+ Logger::warning("Non-integer pop sizes in pop history files for ", date);
}
- );
- if (non_integer_size) {
- Logger::warning("Non-integer pop sizes in pop history files for ", date);
}
}
+
+ province_history_manager.lock_province_histories(map, false);
}
- game_manager.get_history_manager().get_province_manager().lock_province_histories(game_manager.get_map(), false);
+ {
+ /* Diplomacy History */
+ DiplomaticHistoryManager& diplomatic_history_manager = game_manager.get_history_manager().get_diplomacy_manager();
- /* Diplomacy History */
- static constexpr std::string_view diplomacy_history_directory = "history/diplomacy";
- ret &= apply_to_files(
- lookup_files_in_dir(diplomacy_history_directory, ".txt"),
- [this, &game_manager](fs::path const& file) -> bool {
- return game_manager.get_history_manager().get_diplomacy_manager().load_diplomacy_history_file(
- game_manager.get_country_manager(), parse_defines(file).get_file_node()
- );
- }
- );
+ static constexpr std::string_view diplomacy_history_directory = "history/diplomacy";
- /* War History */
- static constexpr std::string_view war_history_directory = "history/wars";
- ret &= apply_to_files(
- lookup_files_in_dir(war_history_directory, ".txt"),
- [this, &game_manager](fs::path const& file) -> bool {
- return game_manager.get_history_manager().get_diplomacy_manager().load_war_history_file(
- game_manager, parse_defines(file).get_file_node()
- );
- }
- );
- game_manager.get_history_manager().get_diplomacy_manager().lock_diplomatic_history();
+ ret &= apply_to_files(
+ lookup_files_in_dir(diplomacy_history_directory, ".txt"),
+ [this, &game_manager, &diplomatic_history_manager](fs::path const& file) -> bool {
+ return diplomatic_history_manager.load_diplomacy_history_file(
+ game_manager.get_country_manager(), parse_defines(file).get_file_node()
+ );
+ }
+ );
+
+ /* War History */
+ static constexpr std::string_view war_history_directory = "history/wars";
+ const path_vector_t war_history_files = lookup_files_in_dir(war_history_directory, ".txt");
+
+ diplomatic_history_manager.reserve_more_wars(war_history_files.size());
+
+ ret &= apply_to_files(
+ war_history_files,
+ [this, &game_manager, &diplomatic_history_manager](fs::path const& file) -> bool {
+ return diplomatic_history_manager.load_war_history_file(
+ game_manager, parse_defines(file).get_file_node()
+ );
+ }
+ );
+
+ diplomatic_history_manager.lock_diplomatic_history();
+ }
return ret;
}
bool Dataloader::_load_events(GameManager& game_manager) {
static constexpr std::string_view events_directory = "events";
+
const bool ret = apply_to_files(
lookup_files_in_dir(events_directory, ".txt"),
[this, &game_manager](fs::path const& file) -> bool {
@@ -595,6 +644,7 @@ bool Dataloader::_load_events(GameManager& game_manager) {
);
}
);
+
game_manager.get_event_manager().lock_events();
return ret;
}
@@ -959,9 +1009,13 @@ bool Dataloader::load_defines(GameManager& game_manager) {
return ret;
}
-#define PARSE_SCRIPTS(name, mgr) \
- if (!mgr.parse_scripts(game_manager)) { Logger::error("Failed to parse ", name, " scripts!"); ret = false; } \
- else Logger::info("Successfully parsed ", name, " scripts!");
+#define PARSE_SCRIPTS(name, manager) \
+ if (!manager.parse_scripts(game_manager)) { \
+ Logger::error("Failed to parse ", name, " scripts!"); \
+ ret = false; \
+ } else { \
+ Logger::info("Successfully parsed ", name, " scripts!"); \
+ }
bool Dataloader::parse_scripts(GameManager& game_manager) const {
bool ret = true;