Skip to content

Commit 6b72836

Browse files
committed
Refactor RuleSet
1 parent 022bf44 commit 6b72836

12 files changed

Lines changed: 297 additions & 356 deletions

File tree

src/openvic-simulation/country/CountryInstance.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "openvic-simulation/politics/NationalValue.hpp"
3535
#include "openvic-simulation/politics/PartyPolicy.hpp"
3636
#include "openvic-simulation/politics/Reform.hpp"
37+
#include "openvic-simulation/politics/RuleSet.hpp"
3738
#include "openvic-simulation/population/Culture.hpp"
3839
#include "openvic-simulation/population/Pop.hpp"
3940
#include "openvic-simulation/population/PopType.hpp"
@@ -1681,23 +1682,23 @@ void CountryInstance::_update_military() {
16811682
}
16821683

16831684
bool CountryInstance::update_rule_set() {
1684-
rule_set.clear();
1685+
rule_set = {};
16851686
CountryParty const* ruling_party_copy = ruling_party.get_untracked();
16861687
if (ruling_party_copy != nullptr) {
16871688
for (PartyPolicy const* party_policy : ruling_party_copy->get_policies().get_values()) {
16881689
if (party_policy != nullptr) {
1689-
rule_set |= party_policy->get_rules();
1690+
rule_set.add_ruleset(party_policy->get_rules());
16901691
}
16911692
}
16921693
}
16931694

16941695
for (Reform const* reform : reforms.get_values()) {
16951696
if (reform != nullptr) {
1696-
rule_set |= reform->get_rules();
1697+
rule_set.add_ruleset(reform->get_rules());
16971698
}
16981699
}
16991700

1700-
return rule_set.trim_and_resolve_conflicts(true);
1701+
return true;
17011702
}
17021703

17031704
static constexpr Modifier const& get_country_status_static_effect(

src/openvic-simulation/country/CountryInstance.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "openvic-simulation/military/CombatWidth.hpp"
99
#include "openvic-simulation/military/UnitBranchedGetterMacro.hpp"
1010
#include "openvic-simulation/modifier/ModifierSum.hpp"
11-
#include "openvic-simulation/politics/Rule.hpp"
11+
#include "openvic-simulation/politics/RuleSet.hpp"
1212
#include "openvic-simulation/population/PopsAggregate.hpp"
1313
#include "openvic-simulation/types/ClampedValue.hpp"
1414
#include "openvic-simulation/types/Date.hpp"

src/openvic-simulation/dataloader/Dataloader.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1054,12 +1054,6 @@ bool Dataloader::load_defines(
10541054
ret = false;
10551055
}
10561056
definition_manager.get_modifier_manager().lock_base_country_modifier_effects();
1057-
if (!definition_manager.get_politics_manager().get_rule_manager().setup_rules(
1058-
definition_manager.get_economy_manager().get_building_type_manager()
1059-
)) {
1060-
spdlog::critical_s("Failed to set up rules!");
1061-
ret = false;
1062-
}
10631057
if (!definition_manager.get_politics_manager().load_issues_file(
10641058
definition_manager.get_modifier_manager(),
10651059
parse_defines_cached(lookup_file(issues_file)).get_file_node()

src/openvic-simulation/politics/BaseIssue.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22

33
#include "openvic-simulation/modifier/Modifier.hpp"
4-
#include "openvic-simulation/politics/Rule.hpp"
4+
#include "openvic-simulation/politics/RuleSet.hpp"
55
#include "openvic-simulation/types/HasIdentifier.hpp"
66

77
namespace OpenVic {

src/openvic-simulation/politics/IssueManager.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ static constexpr colour_t create_issue_reform_colour(size_t index) {
164164
}
165165

166166
bool IssueManager::_load_party_policy(
167-
ModifierManager const& modifier_manager, RuleManager const& rule_manager, std::string_view identifier,
167+
ModifierManager const& modifier_manager, std::string_view identifier,
168168
PartyPolicyGroup& party_policy_group, ast::NodeCPtr node
169169
) {
170170
spdlog::scope scope { fmt::format("party policy {}", identifier) };
@@ -176,7 +176,7 @@ bool IssueManager::_load_party_policy(
176176
bool ret = NodeTools::expect_dictionary_keys_and_default(
177177
modifier_manager.expect_base_country_modifier(values),
178178
"is_jingoism", ZERO_OR_ONE, expect_bool(assign_variable_callback(is_jingoism)),
179-
"rules", ZERO_OR_ONE, rule_manager.expect_rule_set(move_variable_callback(rules)),
179+
"rules", ZERO_OR_ONE, RuleSet::expect_rule_set(move_variable_callback(rules)),
180180
"war_exhaustion_effect", ZERO_OR_ONE, [](const ast::NodeCPtr _) -> bool {
181181
spdlog::warn_s("war_exhaustion_effect does nothing (vanilla issues have it).");
182182
return true;
@@ -209,7 +209,7 @@ bool IssueManager::_load_reform_group(
209209
}
210210

211211
bool IssueManager::_load_reform(
212-
ModifierManager const& modifier_manager, RuleManager const& rule_manager, size_t ordinal, std::string_view identifier,
212+
ModifierManager const& modifier_manager, size_t ordinal, std::string_view identifier,
213213
ReformGroup& reform_group, ast::NodeCPtr node
214214
) {
215215
spdlog::scope scope { fmt::format("reform {}", identifier) };
@@ -228,7 +228,7 @@ bool IssueManager::_load_reform(
228228
"administrative_multiplier", ZERO_OR_ONE, expect_fixed_point(assign_variable_callback(administrative_multiplier)),
229229
"technology_cost", ZERO_OR_ONE, expect_uint(assign_variable_callback(technology_cost)),
230230
"allow", ZERO_OR_MORE, allow.expect_script(),
231-
"rules", ZERO_OR_ONE, rule_manager.expect_rule_set(move_variable_callback(rules)),
231+
"rules", ZERO_OR_ONE, RuleSet::expect_rule_set(move_variable_callback(rules)),
232232
"on_execute", ZERO_OR_ONE, expect_dictionary_keys(
233233
"trigger", ZERO_OR_ONE, on_execute_trigger.expect_script(),
234234
"effect", ONE_EXACTLY, on_execute_effect.expect_script()
@@ -254,7 +254,7 @@ bool IssueManager::_load_reform(
254254
* POL-113, POL-114, POL-115, POL-116
255255
*/
256256
bool IssueManager::load_issues_file(
257-
ModifierManager const& modifier_manager, RuleManager const& rule_manager, ast::NodeCPtr root
257+
ModifierManager const& modifier_manager, ast::NodeCPtr root
258258
) {
259259
spdlog::scope scope { "common/issues.txt" };
260260
bool party_issues_found = false;
@@ -337,7 +337,7 @@ bool IssueManager::load_issues_file(
337337

338338
/* Load issues and reforms. */
339339
ret &= expect_dictionary(
340-
[this, &party_issues_found, &modifier_manager, &rule_manager](
340+
[this, &party_issues_found, &modifier_manager](
341341
std::string_view type_key, ast::NodeCPtr type_value
342342
) -> bool {
343343
if (type_key == "party_issues") {
@@ -346,7 +346,7 @@ bool IssueManager::load_issues_file(
346346
}
347347
party_issues_found = true;
348348

349-
return expect_dictionary([this, &modifier_manager, &rule_manager](
349+
return expect_dictionary([this, &modifier_manager](
350350
std::string_view group_key, ast::NodeCPtr group_value
351351
) -> bool {
352352
PartyPolicyGroup* party_policy_group = party_policy_groups.get_item_by_identifier(group_key);
@@ -356,14 +356,14 @@ bool IssueManager::load_issues_file(
356356
return false;
357357
}
358358

359-
return expect_dictionary([this, &modifier_manager, &rule_manager, party_policy_group](
359+
return expect_dictionary([this, &modifier_manager, party_policy_group](
360360
std::string_view key, ast::NodeCPtr value
361361
) -> bool {
362-
return _load_party_policy(modifier_manager, rule_manager, key, *party_policy_group, value);
362+
return _load_party_policy(modifier_manager, key, *party_policy_group, value);
363363
})(group_value);
364364
})(type_value);
365365
} else {
366-
return expect_dictionary([this, &party_issues_found, &modifier_manager, &rule_manager](
366+
return expect_dictionary([this, &party_issues_found, &modifier_manager](
367367
std::string_view group_key, ast::NodeCPtr group_value
368368
) -> bool {
369369
ReformGroup* reform_group = reform_groups.get_item_by_identifier(group_key);
@@ -375,14 +375,14 @@ bool IssueManager::load_issues_file(
375375

376376
size_t ordinal = 0;
377377

378-
return expect_dictionary([this, &modifier_manager, &rule_manager, reform_group, &ordinal](
378+
return expect_dictionary([this, &modifier_manager, reform_group, &ordinal](
379379
std::string_view key, ast::NodeCPtr value
380380
) -> bool {
381381
if (key == "next_step_only" || key == "administrative") {
382382
return true;
383383
}
384384

385-
return _load_reform(modifier_manager, rule_manager, ordinal++, key, *reform_group, value);
385+
return _load_reform(modifier_manager, ordinal++, key, *reform_group, value);
386386
})(group_value);
387387
})(type_value);
388388
}

src/openvic-simulation/politics/IssueManager.hpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
#pragma once
22

3+
#include "openvic-simulation/politics/BaseIssue.hpp"
34
#include "openvic-simulation/politics/PartyPolicy.hpp"
45
#include "openvic-simulation/politics/Reform.hpp"
56
#include "openvic-simulation/types/IdentifierRegistry.hpp"
6-
#include "BaseIssue.hpp"
77

88
namespace OpenVic {
99
struct ConditionScript;
1010
struct EffectScript;
1111
struct ModifierManager;
12-
struct RuleManager;
1312

1413
struct IssueManager {
1514
private:
@@ -21,14 +20,14 @@ namespace OpenVic {
2120

2221
bool _load_party_policy_group(size_t& expected_party_policies, std::string_view identifier, ast::NodeCPtr node);
2322
bool _load_party_policy(
24-
ModifierManager const& modifier_manager, RuleManager const& rule_manager, std::string_view identifier,
23+
ModifierManager const& modifier_manager, std::string_view identifier,
2524
PartyPolicyGroup& party_policy_group, ast::NodeCPtr node
2625
);
2726
bool _load_reform_group(
2827
size_t& expected_reforms, std::string_view identifier, ReformType& reform_type, ast::NodeCPtr node
2928
);
3029
bool _load_reform(
31-
ModifierManager const& modifier_manager, RuleManager const& rule_manager, size_t ordinal,
30+
ModifierManager const& modifier_manager, size_t ordinal,
3231
std::string_view identifier, ReformGroup& reform_group, ast::NodeCPtr node
3332
);
3433

@@ -84,7 +83,7 @@ namespace OpenVic {
8483
size_t ordinal, fixed_point_t administrative_multiplier, RuleSet&& rules, Reform::tech_cost_t technology_cost,
8584
ConditionScript&& allow, ConditionScript&& on_execute_trigger, EffectScript&& on_execute_effect
8685
);
87-
bool load_issues_file(ModifierManager const& modifier_manager, RuleManager const& rule_manager, ast::NodeCPtr root);
86+
bool load_issues_file(ModifierManager const& modifier_manager, ast::NodeCPtr root);
8887

8988
bool parse_scripts(DefinitionManager const& definition_manager);
9089
};

src/openvic-simulation/politics/PoliticsManager.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
#include "openvic-simulation/politics/NationalFocus.hpp"
77
#include "openvic-simulation/politics/NationalValue.hpp"
88
#include "openvic-simulation/politics/Rebel.hpp"
9-
#include "openvic-simulation/politics/Rule.hpp"
109

1110
namespace OpenVic {
1211
struct PoliticsManager {
1312
private:
1413
GovernmentTypeManager PROPERTY_REF(government_type_manager);
1514
IdeologyManager PROPERTY_REF(ideology_manager);
16-
RuleManager PROPERTY_REF(rule_manager);
1715
IssueManager PROPERTY_REF(issue_manager);
1816
NationalValueManager PROPERTY_REF(national_value_manager);
1917
NationalFocusManager PROPERTY_REF(national_focus_manager);
@@ -35,7 +33,7 @@ namespace OpenVic {
3533
return rebel_manager.load_rebels_file(ideology_manager, government_type_manager, root);
3634
}
3735
inline bool load_issues_file(ModifierManager const& modifier_manager, ast::NodeCPtr root) {
38-
return issue_manager.load_issues_file(modifier_manager, rule_manager, root);
36+
return issue_manager.load_issues_file(modifier_manager, root);
3937
}
4038
};
4139
}

0 commit comments

Comments
 (0)