diff options
author | hackykid <hackykid@openttd.org> | 2005-07-17 20:09:02 +0000 |
---|---|---|
committer | hackykid <hackykid@openttd.org> | 2005-07-17 20:09:02 +0000 |
commit | 552aa1b4dc172a9d769e3c94ff40c99743f428b0 (patch) | |
tree | 2aa47a2f10516c02b42213645730108be6987d02 /pbs.c | |
parent | 09195e0bda3bcec67f306f4e12edde50db90e602 (diff) | |
download | openttd-552aa1b4dc172a9d769e3c94ff40c99743f428b0.tar.xz |
(svn r2625) - Fix: [pbs] Store the end of a train's reserved path explicitly. Prevents trains from unreserving eachothers paths in some cases.
- CodeChange: Use the TrackdirToTrack function instead of &7, and remove an unneeded variable.
Diffstat (limited to 'pbs.c')
-rw-r--r-- | pbs.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -189,13 +189,17 @@ void PBSClearTrack(TileIndex tile, Track track) { MarkTileDirtyByTile(tile); }; -void PBSClearPath(TileIndex tile, Trackdir trackdir) { +void PBSClearPath(TileIndex tile, Trackdir trackdir, TileIndex end_tile, Trackdir end_trackdir) { uint16 res; FindLengthOfTunnelResult flotr; assert(IsValidTile(tile)); - assert((trackdir & ~8) <= 5); + assert(IsValidTrackdir(trackdir)); + do { - PBSClearTrack(tile, trackdir & 7); + PBSClearTrack(tile, TrackdirToTrack(trackdir)); + + if (tile == end_tile && TrackdirToTrack(trackdir) == TrackdirToTrack(end_trackdir)) + return; if (IsTileType(tile, MP_TUNNELBRIDGE) && (_m[tile].m5 & 0xF0)==0 && (unsigned)(_m[tile].m5 & 3) == TrackdirToExitdir(trackdir)) { // this is a tunnel @@ -204,11 +208,7 @@ void PBSClearPath(TileIndex tile, Trackdir trackdir) { tile = flotr.tile; } else { byte exitdir = TrackdirToExitdir(trackdir); - if (IsTileDepotType(tile, TRANSPORT_RAIL) && (exitdir != GetDepotDirection(tile, TRANSPORT_RAIL))) - return; tile = AddTileIndexDiffCWrap(tile, TileIndexDiffCByDir(exitdir)); - if (IsTileDepotType(tile, TRANSPORT_RAIL) && (exitdir != ReverseDiagdir(GetDepotDirection(tile, TRANSPORT_RAIL)))) - return; }; res = PBSTileReserved(tile); |