From 94de25ec109d10b1485c5ebc3433988f76dca97b Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 1 Nov 2022 18:17:27 +0000 Subject: [PATCH] Fix changing town zone settings not updating town zone radii This could cause MP desyncs --- src/settings.cpp | 16 +++++++++++----- src/table/settings/settings.ini | 15 +++++++++++++-- src/town.h | 1 + src/town_cmd.cpp | 7 +++++++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/settings.cpp b/src/settings.cpp index 2aefc6af7b..b891119998 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1265,11 +1265,6 @@ static void SpriteZoomMinChanged(int32 new_value) MarkWholeScreenDirty(); } -static void InvalidateSettingsWindow(int32 new_value) -{ - InvalidateWindowClassesData(WC_GAME_OPTIONS); -} - static void DeveloperModeChanged(int32 new_value) { DebugReconsiderSendRemoteMessages(); @@ -1695,6 +1690,17 @@ static void DayLengthChanged(int32 new_value) MarkWholeScreenDirty(); } +static void TownZoneModeChanged(int32 new_value) +{ + InvalidateWindowClassesData(WC_GAME_OPTIONS); + UpdateTownRadii(); +} + +static void TownZoneCustomValueChanged(int32 new_value) +{ + if (_settings_game.economy.town_zone_calc_mode) UpdateTownRadii(); +} + /** * Replace a passwords that are a literal asterisk with an empty string. * @param newval The new string value for this password field. diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 9b538a299b..f75f023ca8 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -49,7 +49,6 @@ static void InvalidateCompanyLiveryWindow(int32 new_value); static void InvalidateNewGRFChangeWindows(int32 new_value); static void ZoomMinMaxChanged(int32 new_value); static void SpriteZoomMinChanged(int32 new_value); -static void InvalidateSettingsWindow(int32 new_value); static void MaxVehiclesChanged(int32 new_value); static void InvalidateShipPathCache(int32 new_value); static void ImprovedBreakdownsSettingChanged(int32 new_value); @@ -70,6 +69,8 @@ static void SharingRailChanged(int32 new_value); static bool CheckSharingRoad(int32 &new_value); static bool CheckSharingWater(int32 &new_value); static bool CheckSharingAir(int32 &new_value); +static void TownZoneModeChanged(int32 new_value); +static void TownZoneCustomValueChanged(int32 new_value); /* End - Callback Functions for the various settings */ @@ -2564,8 +2565,8 @@ var = economy.town_zone_calc_mode def = false str = STR_CONFIG_SETTING_TOWN_ZONE_CALC_MODE strhelp = STR_CONFIG_SETTING_TOWN_ZONE_CALC_MODE_HELPTEXT -post_cb = InvalidateSettingsWindow cat = SC_EXPERT +post_cb = TownZoneModeChanged patxname = ""town_zone.economy.town_zone_calc_mode"" [SDT_VAR] @@ -2579,6 +2580,7 @@ str = STR_CONFIG_SETTING_TOWN_ZONE_0_MULT strhelp = STR_CONFIG_SETTING_TOWN_ZONE_0_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.town_zone_0_mult"" [SDT_VAR] @@ -2592,6 +2594,7 @@ str = STR_CONFIG_SETTING_TOWN_ZONE_1_MULT strhelp = STR_CONFIG_SETTING_TOWN_ZONE_1_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.town_zone_1_mult"" [SDT_VAR] @@ -2605,6 +2608,7 @@ str = STR_CONFIG_SETTING_TOWN_ZONE_2_MULT strhelp = STR_CONFIG_SETTING_TOWN_ZONE_2_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.town_zone_2_mult"" [SDT_VAR] @@ -2618,6 +2622,7 @@ str = STR_CONFIG_SETTING_TOWN_ZONE_3_MULT strhelp = STR_CONFIG_SETTING_TOWN_ZONE_3_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.town_zone_3_mult"" [SDT_VAR] @@ -2631,6 +2636,7 @@ str = STR_CONFIG_SETTING_TOWN_ZONE_4_MULT strhelp = STR_CONFIG_SETTING_TOWN_ZONE_4_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.town_zone_4_mult"" [SDT_VAR] @@ -2644,6 +2650,7 @@ str = STR_CONFIG_SETTING_CITY_ZONE_0_MULT strhelp = STR_CONFIG_SETTING_CITY_ZONE_0_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.city_zone_0_mult"" [SDT_VAR] @@ -2657,6 +2664,7 @@ str = STR_CONFIG_SETTING_CITY_ZONE_1_MULT strhelp = STR_CONFIG_SETTING_CITY_ZONE_1_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.city_zone_1_mult"" [SDT_VAR] @@ -2670,6 +2678,7 @@ str = STR_CONFIG_SETTING_CITY_ZONE_2_MULT strhelp = STR_CONFIG_SETTING_CITY_ZONE_2_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.city_zone_2_mult"" [SDT_VAR] @@ -2683,6 +2692,7 @@ str = STR_CONFIG_SETTING_CITY_ZONE_3_MULT strhelp = STR_CONFIG_SETTING_CITY_ZONE_3_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.city_zone_3_mult"" [SDT_VAR] @@ -2696,6 +2706,7 @@ str = STR_CONFIG_SETTING_CITY_ZONE_4_MULT strhelp = STR_CONFIG_SETTING_CITY_ZONE_4_MULT_HELPTEXT strval = STR_JUST_COMMA cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged patxname = ""town_zone.economy.city_zone_4_mult"" [SDT_VAR] diff --git a/src/town.h b/src/town.h index 47fcc5dcef..e68e2b010b 100644 --- a/src/town.h +++ b/src/town.h @@ -271,6 +271,7 @@ void ResetHouses(); void ClearTownHouse(Town *t, TileIndex tile); void UpdateTownMaxPass(Town *t); void UpdateTownRadius(Town *t); +void UpdateTownRadii(); CommandCost CheckIfAuthorityAllowsNewStation(TileIndex tile, DoCommandFlag flags); Town *ClosestTownFromTile(TileIndex tile, uint threshold); void ChangeTownRating(Town *t, int add, int max, DoCommandFlag flags); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 3fb319df05..a157947299 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2081,6 +2081,13 @@ void UpdateTownRadius(Town *t) } } +void UpdateTownRadii() +{ + for (Town *town : Town::Iterate()) { + UpdateTownRadius(town); + } +} + void UpdateTownMaxPass(Town *t) { t->supplied[CT_PASSENGERS].old_max = t->cache.population >> 3;