Mercurial > hg > openttd
changeset 17142:958bcdb45229 draft
(svn r21880) -Fix: when a train after reversing ended at the last bit of a bridge ramp and directed outside the bridge, it could still have track set to TRACK_BIT_WORMHOLE
author | smatz <smatz@openttd.org> |
---|---|
date | Fri, 21 Jan 2011 16:35:12 +0000 |
parents | 4ccee6c9442b |
children | d2394a934993 |
files | src/train_cmd.cpp |
diffstat | 1 files changed, 16 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1454,6 +1454,22 @@ /* Call the proper EnterTile function unless we are in a wormhole. */ if (v->track != TRACK_BIT_WORMHOLE) { VehicleEnterTile(v, v->tile, v->x_pos, v->y_pos); + } else { + /* VehicleEnter_TunnelBridge() sets TRACK_BIT_WORMHOLE when the vehicle + * is on the last bit of the bridge head (frame == TILE_SIZE - 1). + * If we were swapped with such a vehicle, we have set TRACK_BIT_WORMHOLE, + * when we shouldn't have. Check if this is the case. */ + TileIndex vt = TileVirtXY(v->x_pos, v->y_pos); + if (IsTileType(vt, MP_TUNNELBRIDGE)) { + VehicleEnterTile(v, vt, v->x_pos, v->y_pos); + if (v->track != TRACK_BIT_WORMHOLE && IsBridgeTile(v->tile)) { + /* We have just left the wormhole, possibly set the + * "goingdown" bit. UpdateInclination() can be used + * because we are at the border of the tile. */ + v->UpdateInclination(true, true); + return; + } + } } v->UpdateViewport(true, true);