From 3b6be81fb327a9c5e7bcc7c2127f513048e67480 Mon Sep 17 00:00:00 2001 From: hop311 Date: Wed, 13 Dec 2023 23:56:20 +0000 Subject: Removed modifier generating macros. --- src/openvic-simulation/economy/Good.cpp | 32 +++++------ src/openvic-simulation/economy/Good.hpp | 2 +- src/openvic-simulation/military/Unit.cpp | 77 +++++++++++++------------- src/openvic-simulation/military/Unit.hpp | 2 +- src/openvic-simulation/misc/Modifier.cpp | 9 ++- src/openvic-simulation/misc/Modifier.hpp | 2 +- src/openvic-simulation/politics/Rebel.cpp | 9 +-- src/openvic-simulation/politics/Rebel.hpp | 2 +- src/openvic-simulation/pop/Pop.cpp | 27 ++++----- src/openvic-simulation/pop/Pop.hpp | 2 +- src/openvic-simulation/research/Technology.cpp | 19 ++++--- src/openvic-simulation/research/Technology.hpp | 2 +- 12 files changed, 98 insertions(+), 87 deletions(-) diff --git a/src/openvic-simulation/economy/Good.cpp b/src/openvic-simulation/economy/Good.cpp index 5500483..44b896b 100644 --- a/src/openvic-simulation/economy/Good.cpp +++ b/src/openvic-simulation/economy/Good.cpp @@ -94,22 +94,22 @@ bool GoodManager::load_goods_file(ast::NodeCPtr root) { return ret; } -#define GOOD_MODIFIER(name) \ - modifier_manager.register_complex_modifier(name); \ - for (Good const& good : this->get_goods()) { \ - ret &= modifier_manager.add_modifier_effect( \ - StringUtils::append_string_views(name, "_", good.get_identifier()), \ - true \ - ); \ - } - -bool GoodManager::generate_modifiers(ModifierManager& modifier_manager) { +bool GoodManager::generate_modifiers(ModifierManager& modifier_manager) const { bool ret = true; - GOOD_MODIFIER("factory_goods_output"); - GOOD_MODIFIER("factory_goods_throughput"); - GOOD_MODIFIER("rgo_goods_output"); - GOOD_MODIFIER("rgo_size"); + + const auto good_modifier = [this, &modifier_manager, &ret](std::string_view name) -> void { + ret &= modifier_manager.register_complex_modifier(name); + for (Good const& good : get_goods()) { + ret &= modifier_manager.add_modifier_effect( + StringUtils::append_string_views(name, "_", good.get_identifier()), true + ); + } + }; + + good_modifier("factory_goods_output"); + good_modifier("factory_goods_throughput"); + good_modifier("rgo_goods_output"); + good_modifier("rgo_size"); + return ret; } - -#undef GOOD_MODIFIER \ No newline at end of file diff --git a/src/openvic-simulation/economy/Good.hpp b/src/openvic-simulation/economy/Good.hpp index c595768..d9d4251 100644 --- a/src/openvic-simulation/economy/Good.hpp +++ b/src/openvic-simulation/economy/Good.hpp @@ -76,6 +76,6 @@ namespace OpenVic { void reset_to_defaults(); bool load_goods_file(ast::NodeCPtr root); - bool generate_modifiers(ModifierManager& modifier_manager); + bool generate_modifiers(ModifierManager& modifier_manager) const; }; } diff --git a/src/openvic-simulation/military/Unit.cpp b/src/openvic-simulation/military/Unit.cpp index 01c6f84..98fe392 100644 --- a/src/openvic-simulation/military/Unit.cpp +++ b/src/openvic-simulation/military/Unit.cpp @@ -188,52 +188,53 @@ bool UnitManager::load_unit_file(GoodManager const& good_manager, ast::NodeCPtr })(root); } -#define STAT_MODIFIER(name, positive_good, format) \ - ret &= modifier_manager.add_modifier_effect(StringUtils::append_string_views(identifier, "_", name), positive_good, ModifierEffect::format_t::format) +bool UnitManager::generate_modifiers(ModifierManager& modifier_manager) const { + bool ret = true; + + const auto generate_stat_modifiers = [&modifier_manager, &ret](std::string_view identifier, Unit::type_t type) -> void { + + const auto stat_modifier = [&modifier_manager, &ret, &identifier](std::string_view suffix, bool positive_good, + ModifierEffect::format_t format) -> void { + ret &= modifier_manager.add_modifier_effect( + StringUtils::append_string_views(identifier, suffix), positive_good, format + ); + }; -bool UnitManager::generate_modifiers(ModifierManager& modifier_manager) { - std::function generate_stat_modifiers = [this, &modifier_manager](std::string_view identifier, Unit::type_t type) -> bool { - modifier_manager.register_complex_modifier(identifier); - bool ret = true; + using enum ModifierEffect::format_t; - STAT_MODIFIER("default_organisation", true, RAW_DECIMAL); - STAT_MODIFIER("maximum_speed", true, RAW_DECIMAL); - STAT_MODIFIER("build_time", false, INT); - STAT_MODIFIER("supply_consumption", false, PROPORTION_DECIMAL); + ret &= modifier_manager.register_complex_modifier(identifier); + + stat_modifier("_default_organisation", true, RAW_DECIMAL); + stat_modifier("_maximum_speed", true, RAW_DECIMAL); + stat_modifier("_build_time", false, INT); + stat_modifier("_supply_consumption", false, PROPORTION_DECIMAL); switch (type) { - case Unit::type_t::LAND: { - STAT_MODIFIER("reconnaissance", true, RAW_DECIMAL); - STAT_MODIFIER("attack", true, RAW_DECIMAL); - STAT_MODIFIER("defence", true, RAW_DECIMAL); - STAT_MODIFIER("discipline", true, PROPORTION_DECIMAL); - STAT_MODIFIER("support", true, PROPORTION_DECIMAL); - STAT_MODIFIER("maneuver", true, INT); - STAT_MODIFIER("siege", true, RAW_DECIMAL); + case Unit::type_t::LAND: + stat_modifier("_reconnaissance", true, RAW_DECIMAL); + stat_modifier("_attack", true, RAW_DECIMAL); + stat_modifier("_defence", true, RAW_DECIMAL); + stat_modifier("_discipline", true, PROPORTION_DECIMAL); + stat_modifier("_support", true, PROPORTION_DECIMAL); + stat_modifier("_maneuver", true, INT); + stat_modifier("_siege", true, RAW_DECIMAL); break; - } - case Unit::type_t::NAVAL: { - STAT_MODIFIER("colonial_points", true, INT); - STAT_MODIFIER("supply_consumption_score", false, INT); - STAT_MODIFIER("hull", true, RAW_DECIMAL); - STAT_MODIFIER("gun_power", true, RAW_DECIMAL); - STAT_MODIFIER("fire_range", true, RAW_DECIMAL); - STAT_MODIFIER("evasion", true, PROPORTION_DECIMAL); - STAT_MODIFIER("torpedo_attack", true, RAW_DECIMAL); + case Unit::type_t::NAVAL: + stat_modifier("_colonial_points", true, INT); + stat_modifier("_supply_consumption_score", false, INT); + stat_modifier("_hull", true, RAW_DECIMAL); + stat_modifier("_gun_power", true, RAW_DECIMAL); + stat_modifier("_fire_range", true, RAW_DECIMAL); + stat_modifier("_evasion", true, PROPORTION_DECIMAL); + stat_modifier("_torpedo_attack", true, RAW_DECIMAL); break; } - } - - return ret; }; - bool ret = true; - ret &= generate_stat_modifiers("army_base", Unit::type_t::LAND); - ret &= generate_stat_modifiers("navy_base", Unit::type_t::NAVAL); - for (Unit const& unit : this->get_units()) - ret &= generate_stat_modifiers(unit.get_identifier(), unit.get_type()); - + generate_stat_modifiers("army_base", Unit::type_t::LAND); + generate_stat_modifiers("navy_base", Unit::type_t::NAVAL); + for (Unit const& unit : get_units()) { + generate_stat_modifiers(unit.get_identifier(), unit.get_type()); + } return ret; } - -#undef STAT_MODIFIER \ No newline at end of file diff --git a/src/openvic-simulation/military/Unit.hpp b/src/openvic-simulation/military/Unit.hpp index 6e3a6e4..a44f4e5 100644 --- a/src/openvic-simulation/military/Unit.hpp +++ b/src/openvic-simulation/military/Unit.hpp @@ -122,6 +122,6 @@ namespace OpenVic { static NodeTools::callback_t expect_type_str(NodeTools::Callback auto callback); bool load_unit_file(GoodManager const& good_manager, ast::NodeCPtr root); - bool generate_modifiers(ModifierManager& modifier_manager); + bool generate_modifiers(ModifierManager& modifier_manager) const; }; } diff --git a/src/openvic-simulation/misc/Modifier.cpp b/src/openvic-simulation/misc/Modifier.cpp index 2e9232b..40698e5 100644 --- a/src/openvic-simulation/misc/Modifier.cpp +++ b/src/openvic-simulation/misc/Modifier.cpp @@ -234,8 +234,13 @@ bool ModifierManager::setup_modifier_effects() { return ret; } -void ModifierManager::register_complex_modifier(std::string_view identifier) { - complex_modifiers.emplace(identifier); +bool ModifierManager::register_complex_modifier(std::string_view identifier) { + if (complex_modifiers.emplace(identifier).second) { + return true; + } else { + Logger::error("Duplicate complex modifier: ", identifier); + return false; + } } bool ModifierManager::add_event_modifier(std::string_view identifier, ModifierValue&& values, Modifier::icon_t icon) { diff --git a/src/openvic-simulation/misc/Modifier.hpp b/src/openvic-simulation/misc/Modifier.hpp index a176d6c..f3a2499 100644 --- a/src/openvic-simulation/misc/Modifier.hpp +++ b/src/openvic-simulation/misc/Modifier.hpp @@ -129,7 +129,7 @@ namespace OpenVic { ModifierEffect::format_t format = ModifierEffect::format_t::PROPORTION_DECIMAL ); - void register_complex_modifier(std::string_view identifier); + bool register_complex_modifier(std::string_view identifier); bool setup_modifier_effects(); diff --git a/src/openvic-simulation/politics/Rebel.cpp b/src/openvic-simulation/politics/Rebel.cpp index a00b4a8..6850e83 100644 --- a/src/openvic-simulation/politics/Rebel.cpp +++ b/src/openvic-simulation/politics/Rebel.cpp @@ -142,16 +142,17 @@ bool RebelManager::load_rebels_file( return ret; } -bool RebelManager::generate_modifiers(ModifierManager& modifier_manager) { +bool RebelManager::generate_modifiers(ModifierManager& modifier_manager) const { bool ret = true; - modifier_manager.register_complex_modifier("rebel_org_gain"); + ret &= modifier_manager.register_complex_modifier("rebel_org_gain"); ret &= modifier_manager.add_modifier_effect("rebel_org_gain_all", false); for (RebelType const& rebel_type : get_rebel_types()) { - std::string modifier_name = StringUtils::append_string_views("rebel_org_gain_", rebel_type.get_identifier()); - ret &= modifier_manager.add_modifier_effect(modifier_name, false); + ret &= modifier_manager.add_modifier_effect( + StringUtils::append_string_views("rebel_org_gain_", rebel_type.get_identifier()), false + ); } return ret; } \ No newline at end of file diff --git a/src/openvic-simulation/politics/Rebel.hpp b/src/openvic-simulation/politics/Rebel.hpp index c0fc9ff..29ae3ae 100644 --- a/src/openvic-simulation/politics/Rebel.hpp +++ b/src/openvic-simulation/politics/Rebel.hpp @@ -77,6 +77,6 @@ namespace OpenVic { ); bool load_rebels_file(IdeologyManager const& ideology_manager, GovernmentTypeManager const& government_type_manager, ast::NodeCPtr root); - bool generate_modifiers(ModifierManager& modifier_manager); + bool generate_modifiers(ModifierManager& modifier_manager) const; }; } \ No newline at end of file diff --git a/src/openvic-simulation/pop/Pop.cpp b/src/openvic-simulation/pop/Pop.cpp index 88ea69a..39deeaa 100644 --- a/src/openvic-simulation/pop/Pop.cpp +++ b/src/openvic-simulation/pop/Pop.cpp @@ -219,21 +219,22 @@ bool PopManager::load_pop_into_vector( return ret; } -#define STRATA_MODIFIER(name, positive_good) \ - ret &= modifier_manager.add_modifier_effect(StringUtils::append_string_views(strata.get_identifier(), name), positive_good) - -bool PopManager::generate_modifiers(ModifierManager& modifier_manager) { +bool PopManager::generate_modifiers(ModifierManager& modifier_manager) const { bool ret = true; for (Strata const& strata : get_stratas()) { - STRATA_MODIFIER("_income_modifier", true); - STRATA_MODIFIER("_savings_modifier", true); - STRATA_MODIFIER("_vote", true); - - STRATA_MODIFIER("_life_needs", false); - STRATA_MODIFIER("_everyday_needs", false); - STRATA_MODIFIER("_luxury_needs", false); + const auto strata_modifier = [&modifier_manager, &ret, &strata](std::string_view suffix, bool positive_good) -> void { + ret &= modifier_manager.add_modifier_effect( + StringUtils::append_string_views(strata.get_identifier(), suffix), positive_good + ); + }; + + strata_modifier("_income_modifier", true); + strata_modifier("_savings_modifier", true); + strata_modifier("_vote", true); + + strata_modifier("_life_needs", false); + strata_modifier("_everyday_needs", false); + strata_modifier("_luxury_needs", false); } return ret; } - -#undef STRATA_MODIFIER diff --git a/src/openvic-simulation/pop/Pop.hpp b/src/openvic-simulation/pop/Pop.hpp index 3d52362..0c84aae 100644 --- a/src/openvic-simulation/pop/Pop.hpp +++ b/src/openvic-simulation/pop/Pop.hpp @@ -141,6 +141,6 @@ namespace OpenVic { bool *non_integer_size ) const; - bool generate_modifiers(ModifierManager& modifier_manager); + bool generate_modifiers(ModifierManager& modifier_manager) const; }; } diff --git a/src/openvic-simulation/research/Technology.cpp b/src/openvic-simulation/research/Technology.cpp index 3ba3624..7851707 100644 --- a/src/openvic-simulation/research/Technology.cpp +++ b/src/openvic-simulation/research/Technology.cpp @@ -143,19 +143,22 @@ bool TechnologyManager::load_technologies_file( })(root); } -#define TECH_MODIFIER(NAME, POS) ret &= modifier_manager.add_modifier_effect(NAME, POS) -#define UNCIV_TECH_MODIFIER(NAME) TECH_MODIFIER(NAME, false); TECH_MODIFIER(StringUtils::append_string_views("self_", NAME), false); -bool TechnologyManager::generate_modifiers(ModifierManager& modifier_manager) { +bool TechnologyManager::generate_modifiers(ModifierManager& modifier_manager) const { bool ret = true; - UNCIV_TECH_MODIFIER("unciv_military_modifier"); - UNCIV_TECH_MODIFIER("unciv_economic_modifier"); + const auto unciv_tech_modifier = [&modifier_manager, &ret](std::string_view name) -> void { + ret &= modifier_manager.add_modifier_effect(name, false); + ret &= modifier_manager.add_modifier_effect(StringUtils::append_string_views("self_", name), false); + }; + + unciv_tech_modifier("unciv_military_modifier"); + unciv_tech_modifier("unciv_economic_modifier"); for (TechnologyFolder const& folder : get_technology_folders()) { - TECH_MODIFIER(StringUtils::append_string_views(folder.get_identifier(), "_research_bonus"), true); + ret &= modifier_manager.add_modifier_effect( + StringUtils::append_string_views(folder.get_identifier(), "_research_bonus"), true + ); } return ret; } -#undef UNCIV_TECH_MODIFIER -#undef TECH_MODIFIER \ No newline at end of file diff --git a/src/openvic-simulation/research/Technology.hpp b/src/openvic-simulation/research/Technology.hpp index 8489e9b..1035a8e 100644 --- a/src/openvic-simulation/research/Technology.hpp +++ b/src/openvic-simulation/research/Technology.hpp @@ -87,6 +87,6 @@ namespace OpenVic { ModifierManager const& modifier_manager, UnitManager const& unit_manager, BuildingTypeManager const& building_type_manager, ast::NodeCPtr root ); // technologies/*.txt - bool generate_modifiers(ModifierManager& modifier_manager); + bool generate_modifiers(ModifierManager& modifier_manager) const; }; } \ No newline at end of file -- cgit v1.2.3-56-ga3b1