aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation
diff options
context:
space:
mode:
author hop311 <hop3114@gmail.com>2023-12-14 00:56:20 +0100
committer hop311 <hop3114@gmail.com>2023-12-14 00:56:20 +0100
commit3b6be81fb327a9c5e7bcc7c2127f513048e67480 (patch)
tree83d5a86fe04594feada3c82258d9c08624e542be /src/openvic-simulation
parent35e07b57aed9177be1bfeb7732ed8f17c71f2354 (diff)
Removed modifier generating macros.
Diffstat (limited to 'src/openvic-simulation')
-rw-r--r--src/openvic-simulation/economy/Good.cpp32
-rw-r--r--src/openvic-simulation/economy/Good.hpp2
-rw-r--r--src/openvic-simulation/military/Unit.cpp77
-rw-r--r--src/openvic-simulation/military/Unit.hpp2
-rw-r--r--src/openvic-simulation/misc/Modifier.cpp9
-rw-r--r--src/openvic-simulation/misc/Modifier.hpp2
-rw-r--r--src/openvic-simulation/politics/Rebel.cpp9
-rw-r--r--src/openvic-simulation/politics/Rebel.hpp2
-rw-r--r--src/openvic-simulation/pop/Pop.cpp27
-rw-r--r--src/openvic-simulation/pop/Pop.hpp2
-rw-r--r--src/openvic-simulation/research/Technology.cpp19
-rw-r--r--src/openvic-simulation/research/Technology.hpp2
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<bool(std::string_view, Unit::type_t)> 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<std::string_view> expect_type_str(NodeTools::Callback<Unit::type_t> 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