npf.c
changeset 2115 71e12444631c
parent 2075 7f0ca01392db
child 2163 637ec3c361f5
--- a/npf.c	Sun Jul 17 19:38:40 2005 +0000
+++ b/npf.c	Sun Jul 17 20:09:02 2005 +0000
@@ -180,27 +180,35 @@
 					 * BUT, you have to have a pretty fucked up junction layout for this to happen,
 					 * so we'll just stop this train, the user will eventually notice, so he can fix it.
 					 */
-					PBSClearPath(start, trackdir);
+					PBSClearPath(start, trackdir, curr->node.tile, curr->node.direction);
 					NPFSetFlag(&ftd->node, NPF_FLAG_PBS_BLOCKED, true);
 					DEBUG(pbs, 1) ("PBS: Self-crossing path!!!");
 					return;
 				};
 
-				PBSReserveTrack(curr->node.tile, (curr->node.direction & 7) );
+				PBSReserveTrack(curr->node.tile, TrackdirToTrack(curr->node.direction) );
 
-				/* we want to reserve the last tile (with the signal) on the path too */
-				if (prev != NULL && start == INVALID_TILE) {
-					PBSReserveTrack(prev->node.tile, (prev->node.direction & 7) );
-					start = prev->node.tile;
-					trackdir = ReverseTrackdir(prev->node.direction);
+				/* we want to reserve the last tile (with the signal) on the path too
+				   also remember this tile, cause its the end of the path (where we exit the block) */
+				if (start == INVALID_TILE) {
+					if (prev != NULL) {
+						PBSReserveTrack(prev->node.tile, TrackdirToTrack(prev->node.direction) );
+						start = prev->node.tile;
+						trackdir = ReverseTrackdir(prev->node.direction);
+					} else {
+						start = curr->node.tile;
+						trackdir = curr->node.direction;
+					}
 				}
 			}
 
 			prev = curr;
 			curr = curr->parent;
 		} while (curr != NULL);
+		// we remember the tile/track where this path leaves the pbs junction
+		ftd->node.tile = start;
+		ftd->node.direction = trackdir;
 	}
-
 }