summaryrefslogtreecommitdiff
path: root/pbs.c
diff options
context:
space:
mode:
authorhackykid <hackykid@openttd.org>2005-07-17 20:09:02 +0000
committerhackykid <hackykid@openttd.org>2005-07-17 20:09:02 +0000
commit1d11bbb34da6bb1cfd8d8351f61940c92027ed55 (patch)
tree2aa47a2f10516c02b42213645730108be6987d02 /pbs.c
parenteabc48218413f5d3e9e26d3675e32055af8cfc61 (diff)
downloadopenttd-1d11bbb34da6bb1cfd8d8351f61940c92027ed55.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.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/pbs.c b/pbs.c
index 493d60690..53711a75b 100644
--- a/pbs.c
+++ b/pbs.c
@@ -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);