summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2008-08-03 17:16:39 +0000
committerfrosch <frosch@openttd.org>2008-08-03 17:16:39 +0000
commitfe058e2ec22f630d34ccde20108850a12d88ea4a (patch)
treeaf2744f05d7b6099dacc5923b484b93fb3b0f702
parent6e4144f84bffd805d12aa24e64c4454bb9099c9b (diff)
downloadopenttd-fe058e2ec22f630d34ccde20108850a12d88ea4a.tar.xz
(svn r13976) -Fix (r13953) [YAPP]: A crashing train could sometimes free the reservation of another train. (assisted by michi_cc)
-rw-r--r--src/train_cmd.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index dc7ff694c..42c7806be 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -3437,11 +3437,6 @@ static void SetVehicleCrashed(Vehicle *v)
for (const Vehicle *u = v; u != NULL; u = u->Next()) {
ClearPathReservation(u->tile, GetVehicleTrackdir(u));
}
- /* Try to reserve all tiles directly under the train, but not the whole
- * railway station platform or both tunnel/bridge ends. */
- for (const Vehicle *u = v; u != NULL; u = u->Next()) {
- TryReserveRailTrack(u->tile, TrackdirToTrack(GetVehicleTrackdir(u)));
- }
}
/* we may need to update crossing we were approaching */
@@ -3511,6 +3506,15 @@ static Vehicle *FindTrainCollideEnum(Vehicle *v, void *data)
tcc->num += 2 + CountPassengersInTrain(coll);
SetVehicleCrashed(coll);
}
+
+ /* Try to reserve all tiles directly under the crashed trains.
+ * As there might be more than two trains involved, we have to do that for all vehicles */
+ const Vehicle *u;
+ FOR_ALL_VEHICLES(u) {
+ if (u->type == VEH_TRAIN && HASBITS(u->vehstatus, VS_CRASHED)) {
+ TryReserveRailTrack(u->tile, TrackBitsToTrack(u->u.rail.track));
+ }
+ }
}
return NULL;