summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/company_func.h3
-rw-r--r--src/settings.cpp64
-rw-r--r--src/table/company_settings.ini12
-rw-r--r--src/vehicle_func.h2
4 files changed, 75 insertions, 6 deletions
diff --git a/src/company_func.h b/src/company_func.h
index 394bf44a3..29650d78c 100644
--- 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 @@ static inline bool IsInteractiveCompany(CompanyID company)
return company == _local_company;
}
+int CompanyServiceInterval(const Company *c, VehicleType type);
+
#endif /* COMPANY_FUNC_H */
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;
diff --git a/src/table/company_settings.ini b/src/table/company_settings.ini
index 932cd6b58..71b95cc39 100644
--- 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 @@ max = 800
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 @@ max = 800
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 @@ max = 800
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 @@ max = 800
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]
diff --git a/src/vehicle_func.h b/src/vehicle_func.h
index 3efed2d5a..758ad8305 100644
--- a/src/vehicle_func.h
+++ b/src/vehicle_func.h
@@ -176,6 +176,4 @@ void GetVehicleSet(VehicleSet &set, Vehicle *v, uint8 num_vehicles);
void CheckCargoCapacity(Vehicle *v);
-int CompanyServiceInterval(const Company *c, VehicleType type);
-
#endif /* VEHICLE_FUNC_H */