diff options
author | Spartan322 <Megacake1234@gmail.com> | 2024-01-05 02:48:46 +0100 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2024-01-18 07:34:43 +0100 |
commit | 3f9911dd1cbfca513c8615d778a8295906d8b7d5 (patch) | |
tree | 0ec60f4eea8c5fe15eebffc6f92dda1defd5ba6f /src/openvic-simulation/diplomacy/CountryRelation.cpp | |
parent | b5783116f67c9f7aa9d8d9653e6bda0227f67cd2 (diff) |
Add skeleton CountryRelationManager
Change `DiplomaticAction::Argument` to refer to `CountryInstance*` instead of `Country*`
Add `GameManager&` argument to `DiplomaticActionManager::setup_diplomatic_actions`
Add some ErrorMacros, likely and unlikely macros and stringization macros (based on Godot's macros)
Implement `increase_relations` DiplomaticAction commit function
Implement `decrease_relations` DiplomaticAction commit function
Fix include StringUtils.hpp errors
Diffstat (limited to 'src/openvic-simulation/diplomacy/CountryRelation.cpp')
-rw-r--r-- | src/openvic-simulation/diplomacy/CountryRelation.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/openvic-simulation/diplomacy/CountryRelation.cpp b/src/openvic-simulation/diplomacy/CountryRelation.cpp new file mode 100644 index 0000000..d07739c --- /dev/null +++ b/src/openvic-simulation/diplomacy/CountryRelation.cpp @@ -0,0 +1,53 @@ +#include "CountryRelation.hpp" + +#include <cassert> + +#include "openvic-simulation/country/CountryInstance.hpp" +#include "openvic-simulation/utility/ErrorMacros.hpp" + +using namespace OpenVic; + +CountryRelationInstanceProxy::CountryRelationInstanceProxy(std::string_view id) : country_id { id } {} + +CountryRelationInstanceProxy::CountryRelationInstanceProxy(CountryInstance const* country) + : country_id { country->get_base_country()->get_identifier() } {} + +CountryRelationInstanceProxy::operator std::string_view() const { + return country_id; +} + +CountryRelationManager::CountryRelationManager(/* TODO: Country Instance Manager Reference */) {} + +bool CountryRelationManager::add_country(CountryRelationInstanceProxy country) { + // TODO: iterate through Country Instances adding country to every previously existing country_relations + return true; +} + +bool CountryRelationManager::remove_country(CountryRelationInstanceProxy country) { + // TODO: iterate through country_relations removing every pair that references the country's id + return true; +} + +country_relation_value_t CountryRelationManager::get_country_relation( + CountryRelationInstanceProxy country, CountryRelationInstanceProxy recepient +) const { + auto it = country_relations.find({ country.country_id, recepient.country_id }); + OV_ERR_FAIL_COND_V(it == country_relations.end(), 0); + return it->second; +} + +country_relation_value_t* +CountryRelationManager::get_country_relation_ptr(CountryRelationInstanceProxy country, CountryRelationInstanceProxy recepient) { + auto it = country_relations.find({ country.country_id, recepient.country_id }); + OV_ERR_FAIL_COND_V(it == country_relations.end(), nullptr); + return &it.value(); +} + +bool CountryRelationManager::set_country_relation( + CountryRelationInstanceProxy country, CountryRelationInstanceProxy recepient, country_relation_value_t value +) { + auto it = country_relations.find({ country.country_id, recepient.country_id }); + OV_ERR_FAIL_COND_V(it == country_relations.end(), false); + it.value() = value; + return true; +} |