mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
(svn r6681) -Fix: when vehicles never expire they will stay at peak reliability instead of the lowest to make them useful even when old
-Fix: when retiring an engine design, invalidate the build windows and invalidate the build window data -Fix: mark build windows dirty when engine reliability changes
This commit is contained in:
parent
bc1070654a
commit
2bb7f1da6c
13
engine.c
13
engine.c
@ -110,18 +110,21 @@ static void CalcEngineReliability(Engine *e)
|
|||||||
if (age < e->duration_phase_1) {
|
if (age < e->duration_phase_1) {
|
||||||
uint start = e->reliability_start;
|
uint start = e->reliability_start;
|
||||||
e->reliability = age * (e->reliability_max - start) / e->duration_phase_1 + start;
|
e->reliability = age * (e->reliability_max - start) / e->duration_phase_1 + start;
|
||||||
} else if ((age -= e->duration_phase_1) < e->duration_phase_2) {
|
} else if ((age -= e->duration_phase_1) < e->duration_phase_2 || _patches.never_expire_vehicles) {
|
||||||
|
/* We are at the peak of this engines life. It will have max reliability.
|
||||||
|
* This is also true if the engines never expire. They will not go bad over time */
|
||||||
e->reliability = e->reliability_max;
|
e->reliability = e->reliability_max;
|
||||||
} else if ((age -= e->duration_phase_2) < e->duration_phase_3) {
|
} else if ((age -= e->duration_phase_2) < e->duration_phase_3) {
|
||||||
uint max = e->reliability_max;
|
uint max = e->reliability_max;
|
||||||
e->reliability = (int)age * (int)(e->reliability_final - max) / e->duration_phase_3 + max;
|
e->reliability = (int)age * (int)(e->reliability_final - max) / e->duration_phase_3 + max;
|
||||||
} else {
|
} else {
|
||||||
// time's up for this engine
|
/* time's up for this engine.
|
||||||
// make it either available to all players (if never_expire_vehicles is enabled and if it was available earlier)
|
* We will now completely retire this design */
|
||||||
// or disable this engine completely
|
e->player_avail = 0;
|
||||||
e->player_avail = (_patches.never_expire_vehicles && e->player_avail)? -1 : 0;
|
|
||||||
e->reliability = e->reliability_final;
|
e->reliability = e->reliability_final;
|
||||||
|
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // Kick this engine out of the lists
|
||||||
}
|
}
|
||||||
|
InvalidateWindowClasses(WC_BUILD_VEHICLE); // Update to show the new reliability
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddTypeToEngines(void)
|
void AddTypeToEngines(void)
|
||||||
|
22
train_gui.c
22
train_gui.c
@ -276,6 +276,27 @@ static void DrawTrainBuildWindow(Window *w)
|
|||||||
if (WP(w,buildtrain_d).data_invalidated) {
|
if (WP(w,buildtrain_d).data_invalidated) {
|
||||||
GenerateBuildList(&WP(w,buildtrain_d).engines, &WP(w,buildtrain_d).num_engines, &WP(w,buildtrain_d).wagons, &WP(w,buildtrain_d).num_wagons, WP(w,buildtrain_d).railtype);
|
GenerateBuildList(&WP(w,buildtrain_d).engines, &WP(w,buildtrain_d).num_engines, &WP(w,buildtrain_d).wagons, &WP(w,buildtrain_d).num_wagons, WP(w,buildtrain_d).railtype);
|
||||||
WP(w,buildtrain_d).data_invalidated = false;
|
WP(w,buildtrain_d).data_invalidated = false;
|
||||||
|
|
||||||
|
/* Make sure that the selected engine is still in the list*/
|
||||||
|
if (WP(w,buildtrain_d).sel_engine != INVALID_ENGINE) {
|
||||||
|
int i;
|
||||||
|
bool found = false;
|
||||||
|
if (HASBIT(WP(w,buildtrain_d).show_engine_wagon, 0)) {
|
||||||
|
for (i = 0; i < WP(w,buildtrain_d).num_engines; i++) {
|
||||||
|
if (WP(w,buildtrain_d).sel_engine != WP(w,buildtrain_d).engines[i]) continue;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found && HASBIT(WP(w,buildtrain_d).show_engine_wagon, 1)) {
|
||||||
|
for (i = 0; i < WP(w,buildtrain_d).num_wagons; i++) {
|
||||||
|
if (WP(w,buildtrain_d).sel_engine != WP(w,buildtrain_d).wagons[i]) continue;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) WP(w,buildtrain_d).sel_engine = INVALID_ENGINE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HASBIT(WP(w,buildtrain_d).show_engine_wagon, 0)) scrollcount += WP(w,buildtrain_d).num_engines;
|
if (HASBIT(WP(w,buildtrain_d).show_engine_wagon, 0)) scrollcount += WP(w,buildtrain_d).num_engines;
|
||||||
@ -330,6 +351,7 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
|
|||||||
WP(w,buildtrain_d).wagons = NULL;
|
WP(w,buildtrain_d).wagons = NULL;
|
||||||
WP(w,buildtrain_d).show_engine_wagon = 3;
|
WP(w,buildtrain_d).show_engine_wagon = 3;
|
||||||
WP(w,buildtrain_d).data_invalidated = true;
|
WP(w,buildtrain_d).data_invalidated = true;
|
||||||
|
WP(w,buildtrain_d).sel_engine = INVALID_ENGINE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WE_INVALIDATE_DATA:
|
case WE_INVALIDATE_DATA:
|
||||||
|
Loading…
Reference in New Issue
Block a user