diff options
author | frosch <frosch@openttd.org> | 2008-08-03 17:16:39 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2008-08-03 17:16:39 +0000 |
commit | fe058e2ec22f630d34ccde20108850a12d88ea4a (patch) | |
tree | af2744f05d7b6099dacc5923b484b93fb3b0f702 | |
parent | 6e4144f84bffd805d12aa24e64c4454bb9099c9b (diff) | |
download | openttd-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.cpp | 14 |
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; |