aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/InstanceManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/InstanceManager.cpp')
-rw-r--r--src/openvic-simulation/InstanceManager.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/openvic-simulation/InstanceManager.cpp b/src/openvic-simulation/InstanceManager.cpp
index 9c7804c..a33acdb 100644
--- a/src/openvic-simulation/InstanceManager.cpp
+++ b/src/openvic-simulation/InstanceManager.cpp
@@ -39,10 +39,30 @@ void InstanceManager::update_gamestate() {
Logger::info("Update: ", today);
- map_instance.update_modifier_sums(today, definition_manager.get_modifier_manager().get_static_modifier_cache());
- country_instance_manager.update_modifier_sums(
- today, definition_manager.get_modifier_manager().get_static_modifier_cache()
- );
+ if constexpr (ProvinceInstance::ADD_OWNER_CONTRIBUTION) {
+ // Calculate local province modifier sums first, then national country modifier sums, then loop over owned provinces
+ // adding their contributions to the owner country's modifier sum and loop over them again to add the country's total
+ // (including province contributions) to the provinces' modifier sum. This results in every country and province
+ // having a full copy of all the modifiers affecting them in their modifier sum.
+ map_instance.update_modifier_sums(
+ today, definition_manager.get_modifier_manager().get_static_modifier_cache()
+ );
+ country_instance_manager.update_modifier_sums(
+ today, definition_manager.get_modifier_manager().get_static_modifier_cache()
+ );
+ } else {
+ // Calculate national country modifier sums first, then local province modifier sums, adding province contributions
+ // to owner countries' modifier sums if each province has an owner. This results in every country having a full copy
+ // of all the modifiers affecting them in their modifier sum, but provinces only having their directly/locally applied
+ // modifiers in their modifier sum, hence requiring both province and owner country modifier effect values to be looked
+ // up and added together to get the full effect on the province.
+ country_instance_manager.update_modifier_sums(
+ today, definition_manager.get_modifier_manager().get_static_modifier_cache()
+ );
+ map_instance.update_modifier_sums(
+ today, definition_manager.get_modifier_manager().get_static_modifier_cache()
+ );
+ }
// Update gamestate...
map_instance.update_gamestate(today, definition_manager.get_define_manager());