From 3daebe5db14949f55be2c50220323138260dbaea Mon Sep 17 00:00:00 2001 From: wvpm <24685035+wvpm@users.noreply.github.com> Date: Mon, 21 Oct 2024 14:09:40 +0200 Subject: contextual modifier parsing --- src/openvic-simulation/military/Deployment.cpp | 2 +- src/openvic-simulation/military/LeaderTrait.cpp | 12 +++--------- src/openvic-simulation/military/UnitType.cpp | 14 ++++++-------- 3 files changed, 10 insertions(+), 18 deletions(-) (limited to 'src/openvic-simulation/military') diff --git a/src/openvic-simulation/military/Deployment.cpp b/src/openvic-simulation/military/Deployment.cpp index bd176be..27cd124 100644 --- a/src/openvic-simulation/military/Deployment.cpp +++ b/src/openvic-simulation/military/Deployment.cpp @@ -144,7 +144,7 @@ bool DeploymentManager::load_oob_file( return false; } - army_regiments.push_back({regiment_name, *regiment_type, regiment_home}); + army_regiments.push_back({ regiment_name, *regiment_type, regiment_home }); return ret; }, diff --git a/src/openvic-simulation/military/LeaderTrait.cpp b/src/openvic-simulation/military/LeaderTrait.cpp index 7835636..e00deec 100644 --- a/src/openvic-simulation/military/LeaderTrait.cpp +++ b/src/openvic-simulation/military/LeaderTrait.cpp @@ -1,5 +1,6 @@ #include "LeaderTrait.hpp" +#include "openvic-simulation/dataloader/NodeTools.hpp" #include "openvic-simulation/modifier/ModifierManager.hpp" using namespace OpenVic; @@ -32,17 +33,10 @@ bool LeaderTraitManager::load_leader_traits_file(ModifierManager const& modifier return expect_dictionary_reserve_length( leader_traits, [this, &modifier_manager, type](std::string_view trait_identifier, ast::NodeCPtr value) -> bool { - using enum Modifier::modifier_type_t; - - static const string_set_t allowed_modifiers = { - "attack", "defence leader", "morale", "organisation", "reconnaissance", - "speed", "attrition", "experience", "reliability" - }; - ModifierValue modifiers; - bool ret = modifier_manager.expect_whitelisted_modifier_value( - move_variable_callback(modifiers), LEADER, allowed_modifiers + bool ret = NodeTools::expect_dictionary( + modifier_manager.expect_leader_modifier(modifiers) )(value); ret &= add_leader_trait(trait_identifier, type, std::move(modifiers)); diff --git a/src/openvic-simulation/military/UnitType.cpp b/src/openvic-simulation/military/UnitType.cpp index 22e108d..920f28b 100644 --- a/src/openvic-simulation/military/UnitType.cpp +++ b/src/openvic-simulation/military/UnitType.cpp @@ -1,6 +1,7 @@ #include "UnitType.hpp" #include "openvic-simulation/country/CountryInstance.hpp" +#include "openvic-simulation/dataloader/NodeTools.hpp" #include "openvic-simulation/map/TerrainType.hpp" #include "openvic-simulation/modifier/ModifierManager.hpp" @@ -247,11 +248,9 @@ bool UnitTypeManager::load_unit_type_file( TerrainType const* terrain_type = terrain_type_manager.get_terrain_type_by_identifier(default_key); if (terrain_type != nullptr) { - using enum Modifier::modifier_type_t; - - // TODO - restrict what modifier effects can be used here - return modifier_manager.expect_modifier_value( - map_callback(unit_args.terrain_modifier_values, terrain_type), UNIT_TERRAIN + ModifierValue& modifier_value = unit_args.terrain_modifier_values[terrain_type]; + return expect_dictionary( + modifier_manager.expect_unit_terrain_modifier(modifier_value, terrain_type->get_identifier()) )(default_value); } @@ -336,14 +335,13 @@ bool UnitTypeManager::generate_modifiers(ModifierManager& modifier_manager) cons std::derived_from auto unit_type_effects, std::string_view identifier ) -> void { using enum ModifierEffect::format_t; - using enum ModifierEffect::target_t; const auto stat_modifier = [&modifier_manager, &ret, &identifier]( ModifierEffect const*& effect_cache, std::string_view suffix, bool is_positive_good, ModifierEffect::format_t format, std::string_view localisation_key ) -> void { - ret &= modifier_manager.add_modifier_effect( - effect_cache, ModifierManager::get_flat_identifier(identifier, suffix), is_positive_good, format, COUNTRY, + ret &= modifier_manager.register_technology_modifier_effect( + effect_cache, ModifierManager::get_flat_identifier(identifier, suffix), is_positive_good, format, StringUtils::append_string_views("$", identifier, "$: $", localisation_key, "$") ); }; -- cgit v1.2.3-56-ga3b1