diff options
author | rubidium <rubidium@openttd.org> | 2013-02-14 17:08:56 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2013-02-14 17:08:56 +0000 |
commit | ef8d491d8f86287249d5d2fa2c955e7c900d5570 (patch) | |
tree | 1d96135245bd8eef7c079d99e201de7469412a99 /src/settings.cpp | |
parent | 369a6f9d1b6856eee47df08b1aae8049eaf4b2fa (diff) | |
download | openttd-ef8d491d8f86287249d5d2fa2c955e7c900d5570.tar.xz |
(svn r24996) -Change: Apply default service interval changes to vehicles without custom interval (peter1138)
Diffstat (limited to 'src/settings.cpp')
-rw-r--r-- | src/settings.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/settings.cpp b/src/settings.cpp index 9ca7cb094..293ce406d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -856,11 +856,14 @@ static bool UpdateConsists(int32 p1) /* 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 @@ static bool CheckInterval(int32 p1) 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; |