diff options
author | Hop311 <Hop3114@gmail.com> | 2024-07-19 21:35:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-19 21:35:22 +0200 |
commit | e0518bee9b4c164f40716a8033b5e207c2060c0b (patch) | |
tree | 6d2de5221d2b1945a065e0abba8198d8a052a92a /src/openvic-simulation/map | |
parent | a673f89bb2705826b1c646365eab1775727372b7 (diff) | |
parent | d8baf57d46539da9edba5952f73089bf9a54bdaf (diff) |
Merge pull request #175 from OpenVicProject/unit-work
Unit position/country/leader handling + more use of unit branch templates
Diffstat (limited to 'src/openvic-simulation/map')
-rw-r--r-- | src/openvic-simulation/map/ProvinceInstance.cpp | 41 | ||||
-rw-r--r-- | src/openvic-simulation/map/ProvinceInstance.hpp | 27 |
2 files changed, 22 insertions, 46 deletions
diff --git a/src/openvic-simulation/map/ProvinceInstance.cpp b/src/openvic-simulation/map/ProvinceInstance.cpp index 1792fe0..6b20cd2 100644 --- a/src/openvic-simulation/map/ProvinceInstance.cpp +++ b/src/openvic-simulation/map/ProvinceInstance.cpp @@ -104,41 +104,36 @@ void ProvinceInstance::tick(Date today) { } } -bool ProvinceInstance::add_army(ArmyInstance& army) { - if (armies.emplace(&army).second) { +template<UnitType::branch_t Branch> +bool ProvinceInstance::add_unit_instance_group(UnitInstanceGroup<Branch>& group) { + if (get_unit_instance_groups<Branch>().emplace(static_cast<UnitInstanceGroupBranched<Branch>*>(&group)).second) { return true; } else { - Logger::error("Trying to add already-existing army ", army.get_name(), " to province ", get_identifier()); + Logger::error( + "Trying to add already-existing ", Branch == UnitType::branch_t::LAND ? "army" : "navy", " ", + group.get_name(), " to province ", get_identifier() + ); return false; } } -bool ProvinceInstance::remove_army(ArmyInstance& army) { - if (armies.erase(&army) > 0) { +template<UnitType::branch_t Branch> +bool ProvinceInstance::remove_unit_instance_group(UnitInstanceGroup<Branch>& group) { + if (get_unit_instance_groups<Branch>().erase(static_cast<UnitInstanceGroupBranched<Branch>*>(&group)) > 0) { return true; } else { - Logger::error("Trying to remove non-existent army ", army.get_name(), " from province ", get_identifier()); + Logger::error( + "Trying to remove non-existent ", Branch == UnitType::branch_t::LAND ? "army" : "navy", " ", + group.get_name(), " from province ", get_identifier() + ); return false; } } -bool ProvinceInstance::add_navy(NavyInstance& navy) { - if (navies.emplace(&navy).second) { - return true; - } else { - Logger::error("Trying to add already-existing navy ", navy.get_name(), " to province ", get_identifier()); - return false; - } -} - -bool ProvinceInstance::remove_navy(NavyInstance& navy) { - if (navies.erase(&navy) > 0) { - return true; - } else { - Logger::error("Trying to remove non-existent navy ", navy.get_name(), " from province ", get_identifier()); - return false; - } -} +template bool ProvinceInstance::add_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::LAND>&); +template bool ProvinceInstance::add_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::NAVAL>&); +template bool ProvinceInstance::remove_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::LAND>&); +template bool ProvinceInstance::remove_unit_instance_group(UnitInstanceGroup<UnitType::branch_t::NAVAL>&); bool ProvinceInstance::setup(BuildingTypeManager const& building_type_manager) { if (buildings_are_locked()) { diff --git a/src/openvic-simulation/map/ProvinceInstance.hpp b/src/openvic-simulation/map/ProvinceInstance.hpp index 4398cd4..ec06e0c 100644 --- a/src/openvic-simulation/map/ProvinceInstance.hpp +++ b/src/openvic-simulation/map/ProvinceInstance.hpp @@ -58,6 +58,8 @@ namespace OpenVic { ordered_set<ArmyInstance*> PROPERTY(armies); ordered_set<NavyInstance*> PROPERTY(navies); + UNIT_BRANCHED_GETTER(get_unit_instance_groups, armies, navies); + std::vector<Pop> PROPERTY(pops); Pop::pop_size_t PROPERTY(total_population); IndexedMap<PopType, fixed_point_t> PROPERTY(pop_type_distribution); @@ -89,31 +91,10 @@ namespace OpenVic { void update_gamestate(Date today); void tick(Date today); - bool add_army(ArmyInstance& army); - bool remove_army(ArmyInstance& army); - bool add_navy(NavyInstance& navy); - bool remove_navy(NavyInstance& navy); - template<UnitType::branch_t Branch> - bool add_unit_instance_group(UnitInstanceGroup<Branch>& group) { - if constexpr (Branch == UnitType::branch_t::LAND) { - return add_army(static_cast<ArmyInstance&>(group)); - } else if constexpr (Branch == UnitType::branch_t::NAVAL) { - return add_navy(static_cast<NavyInstance&>(group)); - } else { - OpenVic::utility::unreachable(); - } - } + bool add_unit_instance_group(UnitInstanceGroup<Branch>& group); template<UnitType::branch_t Branch> - bool remove_unit_instance_group(UnitInstanceGroup<Branch>& group) { - if constexpr (Branch == UnitType::branch_t::LAND) { - return remove_army(static_cast<ArmyInstance&>(group)); - } else if constexpr (Branch == UnitType::branch_t::NAVAL) { - return remove_navy(static_cast<NavyInstance&>(group)); - } else { - OpenVic::utility::unreachable(); - } - } + bool remove_unit_instance_group(UnitInstanceGroup<Branch>& group); bool setup(BuildingTypeManager const& building_type_manager); bool apply_history_to_province(ProvinceHistoryEntry const* entry); |