diff options
author | hop311 <hop3114@gmail.com> | 2024-06-15 00:06:19 +0200 |
---|---|---|
committer | hop311 <hop3114@gmail.com> | 2024-06-20 20:33:02 +0200 |
commit | 41d50b15ac978530a53ed99eea36f180e1d27b16 (patch) | |
tree | 236036a544c54d678fc79344677566c3b060d335 /src/openvic-simulation/country/Country.cpp | |
parent | bfd539513af435564daf70f94f6cce146dd5c948 (diff) |
Renamed Country to CountryDefinitioncountry-definition
Diffstat (limited to 'src/openvic-simulation/country/Country.cpp')
-rw-r--r-- | src/openvic-simulation/country/Country.cpp | 215 |
1 files changed, 0 insertions, 215 deletions
diff --git a/src/openvic-simulation/country/Country.cpp b/src/openvic-simulation/country/Country.cpp deleted file mode 100644 index d21df89..0000000 --- a/src/openvic-simulation/country/Country.cpp +++ /dev/null @@ -1,215 +0,0 @@ -#include "Country.hpp" - -#include <string_view> - -#include "openvic-simulation/dataloader/Dataloader.hpp" -#include "openvic-simulation/dataloader/NodeTools.hpp" -#include "openvic-simulation/DefinitionManager.hpp" -#include "openvic-simulation/politics/Government.hpp" -#include "openvic-simulation/politics/Ideology.hpp" -#include "openvic-simulation/politics/Issue.hpp" -#include "openvic-simulation/pop/Culture.hpp" -#include "openvic-simulation/types/Colour.hpp" -#include "openvic-simulation/types/IdentifierRegistry.hpp" -#include <openvic-dataloader/v2script/AbstractSyntaxTree.hpp> - -using namespace OpenVic; -using namespace OpenVic::NodeTools; - -CountryParty::CountryParty( - std::string_view new_identifier, Date new_start_date, Date new_end_date, Ideology const& new_ideology, - policy_map_t&& new_policies -) : HasIdentifierAndColour { new_identifier, new_ideology.get_colour(), false }, start_date { new_start_date }, - end_date { new_end_date }, ideology { new_ideology }, policies { std::move(new_policies) } {} - -Country::Country( - std::string_view new_identifier, - colour_t new_colour, - size_t new_index, - GraphicalCultureType const& new_graphical_culture, - IdentifierRegistry<CountryParty>&& new_parties, - unit_names_map_t&& new_unit_names, - bool new_dynamic_tag, - government_colour_map_t&& new_alternative_colours, - colour_t new_primary_unit_colour, - colour_t new_secondary_unit_colour, - colour_t new_tertiary_unit_colour -) : HasIdentifierAndColour { new_identifier, new_colour, false }, - index { new_index }, - graphical_culture { new_graphical_culture }, - parties { std::move(new_parties) }, - unit_names { std::move(new_unit_names) }, - dynamic_tag { new_dynamic_tag }, - alternative_colours { std::move(new_alternative_colours) }, - primary_unit_colour { new_primary_unit_colour }, - secondary_unit_colour { new_secondary_unit_colour }, - tertiary_unit_colour { new_tertiary_unit_colour } {} - -bool CountryManager::add_country( - std::string_view identifier, colour_t colour, GraphicalCultureType const* graphical_culture, - IdentifierRegistry<CountryParty>&& parties, Country::unit_names_map_t&& unit_names, bool dynamic_tag, - Country::government_colour_map_t&& alternative_colours -) { - if (identifier.empty()) { - Logger::error("Invalid country identifier - empty!"); - return false; - } - if (!valid_basic_identifier(identifier)) { - Logger::error( - "Invalid country identifier: ", identifier, " (can only contain alphanumeric characters and underscores)" - ); - return false; - } - if (graphical_culture == nullptr) { - Logger::error("Null graphical culture for country ", identifier); - return false; - } - - static constexpr colour_t default_colour = colour_t::fill_as(colour_t::max_value); - - return countries.add_item({ - identifier, colour, countries.size(), *graphical_culture, std::move(parties), std::move(unit_names), - dynamic_tag, std::move(alternative_colours), - /* Default to country colour for the chest and grey for the others. Update later if necessary. */ - colour, default_colour, default_colour - }); -} - -bool CountryManager::load_countries( - DefinitionManager const& definition_manager, Dataloader const& dataloader, ast::NodeCPtr root -) { - static constexpr std::string_view common_dir = "common/"; - bool is_dynamic = false; - - const bool ret = expect_dictionary_reserve_length( - countries, - [this, &definition_manager, &is_dynamic, &dataloader](std::string_view key, ast::NodeCPtr value) -> bool { - if (key == "dynamic_tags") { - return expect_bool([&is_dynamic](bool val) -> bool { - if (val == is_dynamic) { - Logger::warning("Redundant \"is_dynamic\", already ", val ? "true" : "false"); - } else { - if (is_dynamic) { - Logger::warning("Changing \"is_dynamic\" back to false"); - } - is_dynamic = val; - } - return true; - })(value); - } - if (expect_string( - [this, &definition_manager, is_dynamic, &dataloader, &key](std::string_view filepath) -> bool { - if (load_country_data_file( - definition_manager, key, is_dynamic, - Dataloader::parse_defines( - dataloader.lookup_file(StringUtils::append_string_views(common_dir, filepath)) - ).get_file_node() - )) { - return true; - } - Logger::error("Failed to load country data file: ", filepath); - return false; - } - )(value)) { - return true; - } - Logger::error("Failed to load country: ", key); - return false; - } - )(root); - lock_countries(); - return ret; -} - -bool CountryManager::load_country_colours(ast::NodeCPtr root){ - return countries.expect_item_dictionary([](Country& country, ast::NodeCPtr colour_node) -> bool { - return expect_dictionary_keys( - "color1", ONE_EXACTLY, expect_colour(assign_variable_callback(country.primary_unit_colour)), - "color2", ONE_EXACTLY, expect_colour(assign_variable_callback(country.secondary_unit_colour)), - "color3", ONE_EXACTLY, expect_colour(assign_variable_callback(country.tertiary_unit_colour)) - )(colour_node); - })(root); -} - -node_callback_t CountryManager::load_country_party( - PoliticsManager const& politics_manager, IdentifierRegistry<CountryParty>& country_parties -) const { - return [&politics_manager, &country_parties](ast::NodeCPtr value) -> bool { - std::string_view party_name; - Date start_date, end_date; - Ideology const* ideology; - CountryParty::policy_map_t policies; - - bool ret = expect_dictionary_keys_and_default( - [&politics_manager, &policies, &party_name](std::string_view key, ast::NodeCPtr value) -> bool { - return politics_manager.get_issue_manager().expect_issue_group_str( - [&politics_manager, &policies, value, &party_name](IssueGroup const& group) -> bool { - if (policies.contains(&group)) { - Logger::error("Country party ", party_name, " has duplicate entry for ", group.get_identifier()); - return false; - } - return politics_manager.get_issue_manager().expect_issue_identifier( - [&policies, &group](Issue const& issue) -> bool { - if (&issue.get_group() == &group) { - return map_callback(policies, &group)(&issue); - } - // TODO - change this back to error/false once TGC no longer has this issue - Logger::warning("Invalid policy ", issue.get_identifier(), ", group is ", - issue.get_group().get_identifier(), " when ", group.get_identifier(), " was expected"); - return true; - } - )(value); - } - )(key); - }, - "name", ONE_EXACTLY, expect_string(assign_variable_callback(party_name)), - "start_date", ONE_EXACTLY, expect_date(assign_variable_callback(start_date)), - "end_date", ONE_EXACTLY, expect_date(assign_variable_callback(end_date)), - "ideology", ONE_EXACTLY, - politics_manager.get_ideology_manager().expect_ideology_identifier(assign_variable_callback_pointer(ideology)) - )(value); - - ret &= country_parties.add_item( - { party_name, start_date, end_date, *ideology, std::move(policies) }, duplicate_warning_callback - ); - - return ret; - }; -} - -bool CountryManager::load_country_data_file( - DefinitionManager const& definition_manager, std::string_view name, bool is_dynamic, ast::NodeCPtr root -) { - colour_t colour; - GraphicalCultureType const* graphical_culture; - IdentifierRegistry<CountryParty> parties { "country parties" }; - Country::unit_names_map_t unit_names; - Country::government_colour_map_t alternative_colours; - bool ret = expect_dictionary_keys_and_default( - [&definition_manager, &alternative_colours](std::string_view key, ast::NodeCPtr value) -> bool { - return definition_manager.get_politics_manager().get_government_type_manager().expect_government_type_str( - [&alternative_colours, value](GovernmentType const& government_type) -> bool { - return expect_colour(map_callback(alternative_colours, &government_type))(value); - } - )(key); - }, - "color", ONE_EXACTLY, expect_colour(assign_variable_callback(colour)), - "graphical_culture", ONE_EXACTLY, - definition_manager.get_pop_manager().get_culture_manager().expect_graphical_culture_type_identifier( - assign_variable_callback_pointer(graphical_culture) - ), - "party", ZERO_OR_MORE, load_country_party(definition_manager.get_politics_manager(), parties), - "unit_names", ZERO_OR_ONE, - definition_manager.get_military_manager().get_unit_type_manager().expect_unit_type_dictionary_reserve_length( - unit_names, - [&unit_names](UnitType const& unit, ast::NodeCPtr value) -> bool { - return name_list_callback(map_callback(unit_names, &unit))(value); - } - ) - )(root); - - ret &= add_country( - name, colour, graphical_culture, std::move(parties), std::move(unit_names), is_dynamic, std::move(alternative_colours) - ); - return ret; -} |