Mercurial > hg > openttd
changeset 9699:128a1a7ade68 draft
(svn r13806) -Fix [FS#2162]: checking for train waiting at other side of two-way signal was broken
author | smatz <smatz@openttd.org> |
---|---|
date | Wed, 23 Jul 2008 18:23:12 +0000 |
parents | 44a959c1a1eb |
children | 2dfd72441294 |
files | src/train_cmd.cpp |
diffstat | 1 files changed, 11 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2905,13 +2905,13 @@ static void *CheckVehicleAtSignal(Vehicle *v, void *data) { - Direction dir = *(Direction*)data; - - if (v->type == VEH_TRAIN && IsFrontEngine(v)) { - DirDiff diff = ChangeDirDiff(DirDifference(v->direction, dir), DIRDIFF_90RIGHT); - - if (diff == DIRDIFF_90RIGHT || (v->cur_speed <= 5 && diff <= DIRDIFF_REVERSE)) return v; + DiagDirection exitdir = *(DiagDirection *)data; + + /* front engine of a train, not inside wormhole or depot */ + if (v->type == VEH_TRAIN && IsFrontEngine(v) && (v->u.rail.track & TRACK_BIT_MASK) != 0) { + if (v->cur_speed <= 5 && TrainExitDir(v->direction, v->u.rail.track) == exitdir) return v; } + return NULL; } @@ -3004,11 +3004,13 @@ v->subspeed = 0; v->progress = 255 - 10; if (++v->load_unload_time_rem < _settings_game.pf.wait_twoway_signal * 73) { - TileIndex o_tile = gp.new_tile + TileOffsByDiagDir(enterdir); - Direction rdir = ReverseDir(dir); + DiagDirection exitdir = TrackdirToExitdir(i); + TileIndex o_tile = TileAddByDiagDir(gp.new_tile, exitdir); + + exitdir = ReverseDiagDir(exitdir); /* check if a train is waiting on the other side */ - if (VehicleFromPos(o_tile, &rdir, &CheckVehicleAtSignal) == NULL) return; + if (VehicleFromPos(o_tile, &exitdir, &CheckVehicleAtSignal) == NULL) return; } } goto reverse_train_direction;