Mercurial > hg > openttd
changeset 20063:9484060b5b83 draft
(svn r24996) -Change: Apply default service interval changes to vehicles without custom interval (peter1138)
author | rubidium <rubidium@openttd.org> |
---|---|
date | Thu, 14 Feb 2013 17:08:56 +0000 |
parents | 7456d9748fcb |
children | 871b52359afb |
files | src/company_func.h src/settings.cpp src/table/company_settings.ini src/vehicle_func.h |
diffstat | 4 files changed, 75 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/company_func.h +++ b/src/company_func.h @@ -15,6 +15,7 @@ #include "command_type.h" #include "company_type.h" #include "gfx_type.h" +#include "vehicle_type.h" bool MayCompanyTakeOver(CompanyID cbig, CompanyID small); void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner); @@ -56,4 +57,6 @@ return company == _local_company; } +int CompanyServiceInterval(const Company *c, VehicleType type); + #endif /* COMPANY_FUNC_H */
--- a/src/settings.cpp +++ b/src/settings.cpp @@ -856,11 +856,14 @@ /* Check service intervals of vehicles, p1 is value of % or day based servicing */ static bool CheckInterval(int32 p1) { + bool update_vehicles; VehicleDefaultSettings *vds; if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) { vds = &_settings_client.company.vehicle; + update_vehicles = false; } else { vds = &Company::Get(_current_company)->settings.vehicle; + update_vehicles = true; } if (p1 != 0) { @@ -875,11 +878,72 @@ vds->servint_ships = 360; } + if (update_vehicles) { + const Company *c = Company::Get(_current_company); + Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->owner == _current_company && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) { + v->SetServiceInterval(CompanyServiceInterval(c, v->type)); + v->SetServiceIntervalIsPercent(p1 != 0); + } + } + } + InvalidateDetailsWindow(0); return true; } +static bool UpdateInterval(VehicleType type, int32 p1) +{ + bool update_vehicles; + VehicleDefaultSettings *vds; + if (_game_mode == GM_MENU || !Company::IsValidID(_current_company)) { + vds = &_settings_client.company.vehicle; + update_vehicles = false; + } else { + vds = &Company::Get(_current_company)->settings.vehicle; + update_vehicles = true; + } + + /* Test if the interval is valid */ + uint16 interval = GetServiceIntervalClamped(p1, vds->servint_ispercent); + if (interval != p1) return false; + + if (update_vehicles) { + Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->owner == _current_company && v->type == type && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) { + v->SetServiceInterval(p1); + } + } + } + + InvalidateDetailsWindow(0); + + return true; +} + +static bool UpdateIntervalTrains(int32 p1) +{ + return UpdateInterval(VEH_TRAIN, p1); +} + +static bool UpdateIntervalRoadVeh(int32 p1) +{ + return UpdateInterval(VEH_ROAD, p1); +} + +static bool UpdateIntervalShips(int32 p1) +{ + return UpdateInterval(VEH_SHIP, p1); +} + +static bool UpdateIntervalAircraft(int32 p1) +{ + return UpdateInterval(VEH_AIRCRAFT, p1); +} + static bool TrainAccelerationModelChanged(int32 p1) { Train *t;
--- a/src/table/company_settings.ini +++ b/src/table/company_settings.ini @@ -9,6 +9,10 @@ [pre-amble] static bool CheckInterval(int32 p1); static bool InvalidateDetailsWindow(int32 p1); +static bool UpdateIntervalTrains(int32 p1); +static bool UpdateIntervalRoadVeh(int32 p1); +static bool UpdateIntervalShips(int32 p1); +static bool UpdateIntervalAircraft(int32 p1); static const SettingDesc _company_settings[] = { [post-amble] @@ -88,7 +92,7 @@ str = STR_CONFIG_SETTING_SERVINT_TRAINS strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -proc = InvalidateDetailsWindow +proc = UpdateIntervalTrains [SDT_VAR] base = CompanySettings @@ -101,7 +105,7 @@ str = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -proc = InvalidateDetailsWindow +proc = UpdateIntervalRoadVeh [SDT_VAR] base = CompanySettings @@ -114,7 +118,7 @@ str = STR_CONFIG_SETTING_SERVINT_SHIPS strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -proc = InvalidateDetailsWindow +proc = UpdateIntervalShips [SDT_VAR] base = CompanySettings @@ -127,7 +131,7 @@ str = STR_CONFIG_SETTING_SERVINT_AIRCRAFT strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -proc = InvalidateDetailsWindow +proc = UpdateIntervalAircraft [SDT_END]