From fd80a1ec66b3a85efaf5f6cf136eb104ddb02919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Cheng?= Date: Mon, 25 Mar 2024 20:38:44 +0000 Subject: [PATCH] Fix #11345: Use correct default button value for vehicle service interval setting --- src/settings_gui.cpp | 1 + src/settings_table.cpp | 26 +++++++++++++++++++++++++ src/table/settings/company_settings.ini | 5 +++++ 3 files changed, 32 insertions(+) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 793b938e06..d33f6f8361 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2734,6 +2734,7 @@ struct GameSettingsWindow : Window { value = ClampTo(llvalue); } else { value = sd->def; + if (sd->get_def_cb != nullptr) sd->get_def_cb(value); } SetSettingValue(this->valuewindow_entry->setting, value); diff --git a/src/settings_table.cpp b/src/settings_table.cpp index 5dd9ed5c56..4538c9e88f 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -240,6 +240,32 @@ static void UpdateServiceInterval(VehicleType type, int32_t new_value) SetWindowClassesDirty(WC_VEHICLE_DETAILS); } +/** + * Checks if the service intervals in the settings are specified as percentages and corrects the default value accordingly. + * @param new_value Contains the service interval's default value in days, or 50 (default in percentage). + */ +static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value) +{ + VehicleDefaultSettings *vds; + if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) { + vds = &_settings_client.company.vehicle; + } else { + vds = &Company::Get(_current_company)->settings.vehicle; + } + + if (vds->servint_ispercent) { + new_value = DEF_SERVINT_PERCENT; + } else if (TimerGameEconomy::UsingWallclockUnits(_game_mode == GM_MENU)) { + switch (type) { + case VEH_TRAIN: new_value = DEF_SERVINT_MINUTES_TRAINS; break; + case VEH_ROAD: new_value = DEF_SERVINT_MINUTES_ROADVEH; break; + case VEH_AIRCRAFT: new_value = DEF_SERVINT_MINUTES_AIRCRAFT; break; + case VEH_SHIP: new_value = DEF_SERVINT_MINUTES_SHIPS; break; + default: NOT_REACHED(); + } + } +} + static void TrainAccelerationModelChanged(int32_t) { for (Train *t : Train::Iterate()) { diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index ad7a026887..64383eb641 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -12,6 +12,7 @@ static void UpdateAllServiceInterval(int32_t new_value); static bool CanUpdateServiceInterval(VehicleType type, int32_t &new_value); static void UpdateServiceInterval(VehicleType type, int32_t new_value); static void SettingsValueAbsolute(const IntSettingDesc &sd, uint first_param, int32_t value); +static void GetDefaultServiceInterval(VehicleType type, int32_t &new_value); static const SettingVariant _company_settings_table[] = { [post-amble] @@ -98,6 +99,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_TRAIN, new_value); } [SDT_VAR] var = vehicle.servint_roadveh @@ -112,6 +114,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_ROAD, new_value); } [SDT_VAR] var = vehicle.servint_ships @@ -126,6 +129,7 @@ strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_SHIP, new_value); } [SDT_VAR] var = vehicle.servint_aircraft @@ -140,3 +144,4 @@ strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); } +def_cb = [](auto &new_value) { GetDefaultServiceInterval(VEH_AIRCRAFT, new_value); }