aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/country
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/country')
-rw-r--r--src/openvic-simulation/country/Country.cpp31
-rw-r--r--src/openvic-simulation/country/Country.hpp14
2 files changed, 22 insertions, 23 deletions
diff --git a/src/openvic-simulation/country/Country.cpp b/src/openvic-simulation/country/Country.cpp
index b2c4a71..9e244c1 100644
--- a/src/openvic-simulation/country/Country.cpp
+++ b/src/openvic-simulation/country/Country.cpp
@@ -45,9 +45,9 @@ CountryParty::policy_map_t const& CountryParty::get_policies() const {
Country::Country(
std::string_view new_identifier, colour_t new_colour, GraphicalCultureType const& new_graphical_culture,
- std::vector<CountryParty>&& new_parties, unit_names_map_t&& new_unit_names, bool new_dynamic_tag,
+ IdentifierRegistry<CountryParty>&& new_parties, unit_names_map_t&& new_unit_names, bool new_dynamic_tag,
government_colour_map_t&& new_alternative_colours
-) : HasIdentifierAndColour { new_identifier, new_colour, true, false }, graphical_culture { new_graphical_culture },
+) : HasIdentifierAndColour { new_identifier, new_colour, false, false }, 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) } {}
@@ -55,10 +55,6 @@ GraphicalCultureType const& Country::get_graphical_culture() const {
return graphical_culture;
}
-std::vector<CountryParty> const& Country::get_parties() const {
- return parties;
-}
-
Country::unit_names_map_t const& Country::get_unit_names() const {
return unit_names;
}
@@ -75,7 +71,7 @@ CountryManager::CountryManager() : countries { "countries" } {}
bool CountryManager::add_country(
std::string_view identifier, colour_t colour, GraphicalCultureType const* graphical_culture,
- std::vector<CountryParty>&& parties, Country::unit_names_map_t&& unit_names, bool dynamic_tag,
+ IdentifierRegistry<CountryParty>&& parties, Country::unit_names_map_t&& unit_names, bool dynamic_tag,
Country::government_colour_map_t&& alternative_colours
) {
if (identifier.empty()) {
@@ -122,7 +118,7 @@ bool CountryManager::load_countries(
[this, &game_manager, is_dynamic, &dataloader, &countries_dir, &key](std::string_view filepath) -> bool {
if (load_country_data_file(
game_manager, key, is_dynamic,
- Dataloader::parse_defines(dataloader.lookup_file(countries_dir / filepath)).get_file_node()
+ Dataloader::parse_defines(dataloader.lookup_file_case_insensitive(countries_dir / filepath)).get_file_node()
)) {
return true;
}
@@ -141,7 +137,7 @@ bool CountryManager::load_countries(
}
node_callback_t CountryManager::load_country_party(
- PoliticsManager const& politics_manager, std::vector<CountryParty>& country_parties
+ PoliticsManager const& politics_manager, IdentifierRegistry<CountryParty>& country_parties
) const {
return [&politics_manager, &country_parties](ast::NodeCPtr value) -> bool {
std::string_view party_name;
@@ -149,7 +145,7 @@ node_callback_t CountryManager::load_country_party(
Ideology const* ideology;
CountryParty::policy_map_t policies;
- const bool ret = expect_dictionary_keys_and_default(
+ 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 {
@@ -163,9 +159,10 @@ node_callback_t CountryManager::load_country_party(
policies.emplace(&group, &issue);
return true;
}
- Logger::error("Invalid policy ", issue.get_identifier(), ", group is ",
+ // 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 false;
+ return true;
}
)(value);
}
@@ -178,7 +175,9 @@ node_callback_t CountryManager::load_country_party(
politics_manager.get_ideology_manager().expect_ideology_identifier(assign_variable_callback_pointer(ideology))
)(value);
- country_parties.emplace_back(CountryParty { party_name, start_date, end_date, *ideology, std::move(policies) });
+ ret &= country_parties.add_item(
+ { party_name, start_date, end_date, *ideology, std::move(policies) }, duplicate_warning_callback
+ );
return ret;
};
@@ -189,7 +188,7 @@ bool CountryManager::load_country_data_file(
) {
colour_t colour;
GraphicalCultureType const* graphical_culture;
- std::vector<CountryParty> country_parties;
+ 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(
@@ -214,7 +213,7 @@ bool CountryManager::load_country_data_file(
game_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(game_manager.get_politics_manager(), country_parties),
+ "party", ZERO_OR_MORE, load_country_party(game_manager.get_politics_manager(), parties),
"unit_names", ZERO_OR_ONE,
game_manager.get_military_manager().get_unit_manager().expect_unit_dictionary(
[&unit_names, &name](Unit const& unit, ast::NodeCPtr value) -> bool {
@@ -230,7 +229,7 @@ bool CountryManager::load_country_data_file(
)(root);
ret &= add_country(
- name, colour, graphical_culture, std::move(country_parties), std::move(unit_names), is_dynamic,
+ name, colour, graphical_culture, std::move(parties), std::move(unit_names), is_dynamic,
std::move(alternative_colours)
);
return ret;
diff --git a/src/openvic-simulation/country/Country.hpp b/src/openvic-simulation/country/Country.hpp
index 1ab0e7e..7754a0b 100644
--- a/src/openvic-simulation/country/Country.hpp
+++ b/src/openvic-simulation/country/Country.hpp
@@ -5,7 +5,6 @@
#include <string>
#include <string_view>
#include <type_traits>
-#include <unordered_map>
#include <vector>
#include <openvic-dataloader/v2script/AbstractSyntaxTree.hpp>
@@ -64,22 +63,23 @@ namespace OpenVic {
/* Not const to allow elements to be moved, otherwise a copy is forced
* which causes a compile error as the copy constructor has been deleted.
*/
- std::vector<CountryParty> parties;
+ IdentifierRegistry<CountryParty> parties;
const unit_names_map_t unit_names;
const bool dynamic_tag;
const government_colour_map_t alternative_colours;
Country(
std::string_view new_identifier, colour_t new_colour, GraphicalCultureType const& new_graphical_culture,
- std::vector<CountryParty>&& new_parties, unit_names_map_t&& new_unit_names, bool new_dynamic_tag,
+ IdentifierRegistry<CountryParty>&& new_parties, unit_names_map_t&& new_unit_names, bool new_dynamic_tag,
government_colour_map_t&& new_alternative_colours
);
public:
Country(Country&&) = default;
+ IDENTIFIER_REGISTRY_ACCESSORS_CUSTOM_PLURAL(party, parties)
+
GraphicalCultureType const& get_graphical_culture() const;
- std::vector<CountryParty> const& get_parties() const;
unit_names_map_t const& get_unit_names() const;
bool is_dynamic_tag() const;
government_colour_map_t const& get_alternative_colours() const;
@@ -90,7 +90,7 @@ namespace OpenVic {
IdentifierRegistry<Country> countries;
NodeTools::node_callback_t load_country_party(
- PoliticsManager const& politics_manager, std::vector<CountryParty>& country_parties
+ PoliticsManager const& politics_manager, IdentifierRegistry<CountryParty>& country_parties
) const;
public:
@@ -98,10 +98,10 @@ namespace OpenVic {
bool add_country(
std::string_view identifier, colour_t colour, GraphicalCultureType const* graphical_culture,
- std::vector<CountryParty>&& parties, Country::unit_names_map_t&& unit_names, bool dynamic_tag,
+ IdentifierRegistry<CountryParty>&& parties, Country::unit_names_map_t&& unit_names, bool dynamic_tag,
Country::government_colour_map_t&& alternative_colours
);
- IDENTIFIER_REGISTRY_ACCESSORS_CUSTOM_PLURAL(country, countries);
+ IDENTIFIER_REGISTRY_ACCESSORS_CUSTOM_PLURAL(country, countries)
bool load_countries(
GameManager const& game_manager, Dataloader const& dataloader, fs::path const& countries_dir, ast::NodeCPtr root