train_cmd.c
changeset 2916 8f1aa489701f
parent 2883 e1efe385e89c
child 2928 414b96d4d4fb
--- a/train_cmd.c	Sun Jan 29 18:34:43 2006 +0000
+++ b/train_cmd.c	Sun Jan 29 18:57:26 2006 +0000
@@ -19,7 +19,6 @@
 #include "player.h"
 #include "sound.h"
 #include "depot.h"
-#include "debug.h"
 #include "waypoint.h"
 #include "vehicle_gui.h"
 #include "train.h"
@@ -1552,81 +1551,10 @@
 	}
 }
 
-static TileIndex GetVehicleTileOutOfTunnel(const Vehicle* v, bool reverse)
-{
-	TileIndex tile;
-	byte direction = (!reverse) ? DirToDiagdir(v->direction) : ReverseDiagdir(v->direction >> 1);
-	TileIndexDiff delta = TileOffsByDir(direction);
-
-	if (v->u.rail.track != 0x40) return v->tile;
-
-	for (tile = v->tile;; tile += delta) {
-		if (IsTunnelTile(tile) && GB(_m[tile].m5, 0, 2) != direction && GetTileZ(tile) == v->z_pos)
- 			break;
- 	}
- 	return tile;
-}
-
 static void ReverseTrainDirection(Vehicle *v)
 {
 	int l = 0, r = -1;
 	Vehicle *u;
-	TileIndex tile;
-	Trackdir trackdir;
-	TileIndex pbs_end_tile = v->u.rail.pbs_end_tile; // these may be changed, and we may need
-	Trackdir pbs_end_trackdir = v->u.rail.pbs_end_trackdir; // the old values, so cache them
-
-	u = GetLastVehicleInChain(v);
-	tile = GetVehicleTileOutOfTunnel(u, false);
-	trackdir = ReverseTrackdir(GetVehicleTrackdir(u));
-
-	if (PBSTileReserved(tile) & (1 << TrackdirToTrack(trackdir))) {
-		NPFFindStationOrTileData fstd;
-		NPFFoundTargetData ftd;
-
-		NPFFillWithOrderData(&fstd, v);
-
-		tile = GetVehicleTileOutOfTunnel(u, true);
-
-		DEBUG(pbs, 2) ("pbs: (%i) choose reverse (RV), tile:%x, trackdir:%i",v->unitnumber,  u->tile, trackdir);
-		ftd = NPFRouteToStationOrTile(tile, trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype, PBS_MODE_ANY);
-
-		if (ftd.best_trackdir == 0xFF) {
-			DEBUG(pbs, 0) ("pbs: (%i) no nodes encountered (RV)", v->unitnumber);
-			CLRBIT(v->u.rail.flags, VRF_REVERSING);
-			return;
-		}
-
-		// we found a way out of the pbs block
-		if (NPFGetFlag(&ftd.node, NPF_FLAG_PBS_EXIT)) {
-			if (NPFGetFlag(&ftd.node, NPF_FLAG_PBS_BLOCKED)) {
-				CLRBIT(v->u.rail.flags, VRF_REVERSING);
-				return;
-			}
-		}
-
-		v->u.rail.pbs_end_tile = ftd.node.tile;
-		v->u.rail.pbs_end_trackdir = ftd.node.direction;
-	}
-
-	tile = GetVehicleTileOutOfTunnel(v, false);
-	trackdir = GetVehicleTrackdir(v);
-
-	if (v->u.rail.pbs_status == PBS_STAT_HAS_PATH) {
-		TileIndex tile = AddTileIndexDiffCWrap(v->tile, TileIndexDiffCByDir(TrackdirToExitdir(trackdir)));
-		uint32 ts;
-		assert(tile != INVALID_TILE);
-		ts = GetTileTrackStatus(tile, TRANSPORT_RAIL);
-		ts &= TrackdirReachesTrackdirs(trackdir);
-		assert(ts != 0 && KillFirstBit2x64(ts) == 0);
-		trackdir = FindFirstBit2x64(ts);
-		PBSClearPath(tile, trackdir, pbs_end_tile, pbs_end_trackdir);
-		v->u.rail.pbs_status = PBS_STAT_NONE;
-	} else if (PBSTileReserved(tile) & (1 << TrackdirToTrack(trackdir))) {
-		PBSClearPath(tile, trackdir, pbs_end_tile, pbs_end_trackdir);
-		if (v->u.rail.track != 0x40)
-			PBSReserveTrack(tile, trackdir & 7);
-	};
 
 	if (IsTileDepotType(v->tile, TRANSPORT_RAIL))
 		InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
@@ -2040,8 +1968,6 @@
 	}
 
 	if (v->u.rail.force_proceed == 0) {
-		Trackdir trackdir = GetVehicleTrackdir(v);
-
 		if (++v->load_unload_time_rem < 37) {
 			InvalidateWindowClasses(WC_TRAINS_LIST);
 			return true;
@@ -2049,35 +1975,12 @@
 
 		v->load_unload_time_rem = 0;
 
-		if (PBSIsPbsSegment(v->tile, trackdir)) {
-			NPFFindStationOrTileData fstd;
-			NPFFoundTargetData ftd;
-
-			if (PBSTileUnavail(v->tile) & (1 << trackdir)) return true;
-
-			NPFFillWithOrderData(&fstd, v);
-
-			DEBUG(pbs, 2) ("pbs: (%i) choose depot (DP), tile:%x, trackdir:%i",v->unitnumber,  v->tile, trackdir);
-			ftd = NPFRouteToStationOrTile(v->tile, trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype, PBS_MODE_GREEN);
-
-			// we found a way out of the pbs block
-			if (NPFGetFlag(&ftd.node, NPF_FLAG_PBS_EXIT)) {
-				if (NPFGetFlag(&ftd.node, NPF_FLAG_PBS_BLOCKED) || NPFGetFlag(&ftd.node, NPF_FLAG_PBS_RED)) {
-					return true;
-				} else {
-					v->u.rail.pbs_end_tile = ftd.node.tile;
-					v->u.rail.pbs_end_trackdir = ftd.node.direction;
-					goto green;
-				}
-			}
-		}
-
 		if (UpdateSignalsOnSegment(v->tile, v->direction)) {
 			InvalidateWindowClasses(WC_TRAINS_LIST);
 			return true;
 		}
 	}
-green:
+
 	VehicleServiceInDepot(v);
 	InvalidateWindowClasses(WC_TRAINS_LIST);
 	TrainPlayLeaveStationSound(v);
@@ -2215,29 +2118,13 @@
 		NPFFindStationOrTileData fstd;
 		NPFFoundTargetData ftd;
 		Trackdir trackdir;
-		uint16 pbs_tracks;
 
 		NPFFillWithOrderData(&fstd, v);
 		/* The enterdir for the new tile, is the exitdir for the old tile */
 		trackdir = GetVehicleTrackdir(v);
 		assert(trackdir != 0xff);
 
-		pbs_tracks = PBSTileReserved(tile);
-		pbs_tracks |= pbs_tracks << 8;
-		pbs_tracks &= TrackdirReachesTrackdirs(trackdir);
-		if (pbs_tracks || (v->u.rail.pbs_status == PBS_STAT_NEED_PATH)) {
-			DEBUG(pbs, 2) ("pbs: (%i) choosefromblock, tile_org:%x tile_dst:%x  trackdir:%i  pbs_tracks:%i",v->unitnumber, tile,tile - TileOffsByDir(enterdir), trackdir, pbs_tracks);
-			// clear the currently planned path
-			if (v->u.rail.pbs_status != PBS_STAT_NEED_PATH) PBSClearPath(tile, FindFirstBit2x64(pbs_tracks), v->u.rail.pbs_end_tile, v->u.rail.pbs_end_trackdir);
-
-			// try to find a route to a green exit signal
-			ftd = NPFRouteToStationOrTile(tile - TileOffsByDir(enterdir), trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype, PBS_MODE_ANY);
-
-			v->u.rail.pbs_end_tile = ftd.node.tile;
-			v->u.rail.pbs_end_trackdir = ftd.node.direction;
-
-		} else
-			ftd = NPFRouteToStationOrTile(tile - TileOffsByDir(enterdir), trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype, PBS_MODE_NONE);
+		ftd = NPFRouteToStationOrTile(tile - TileOffsByDir(enterdir), trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype);
 
 		if (ftd.best_trackdir == 0xff) {
 			/* We are already at our target. Just do something */
@@ -2317,8 +2204,7 @@
 		assert(trackdir != 0xff);
 		assert(trackdir_rev != 0xff);
 
-		ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, last->tile, trackdir_rev, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype, PBS_MODE_NONE);
-
+		ftd = NPFRouteToStationOrTileTwoWay(v->tile, trackdir, last->tile, trackdir_rev, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype);
 		if (ftd.best_bird_dist != 0) {
 			/* We didn't find anything, just keep on going straight ahead */
 			reverse_best = false;
@@ -2906,7 +2792,7 @@
 				} else {
 					/* is not inside depot */
 
-					if ((prev == NULL) && (!TrainCheckIfLineEnds(v)))
+					if (!TrainCheckIfLineEnds(v))
 						return;
 
 					r = VehicleEnterTile(v, gp.new_tile, gp.x, gp.y);
@@ -2961,56 +2847,11 @@
 				}
 
 				if (prev == NULL) {
-					byte trackdir;
 					/* Currently the locomotive is active. Determine which one of the
 					 * available tracks to choose */
 					chosen_track = 1 << ChooseTrainTrack(v, gp.new_tile, enterdir, bits);
 					assert(chosen_track & tracks);
 
-					trackdir = TrackEnterdirToTrackdir(FIND_FIRST_BIT(chosen_track), enterdir);
-					assert(trackdir != 0xff);
-
-					if (PBSIsPbsSignal(gp.new_tile,trackdir) && PBSIsPbsSegment(gp.new_tile,trackdir)) {
-						// encountered a pbs signal, and possible a pbs block
-						DEBUG(pbs, 3) ("pbs: (%i) arrive AT signal, tile:%x  pbs_stat:%i",v->unitnumber, gp.new_tile, v->u.rail.pbs_status);
-
-						if (v->u.rail.pbs_status == PBS_STAT_NONE) {
-							// we havent planned a path already, so try to find one now
-							NPFFindStationOrTileData fstd;
-							NPFFoundTargetData ftd;
-
-							NPFFillWithOrderData(&fstd, v);
-
-							DEBUG(pbs, 2) ("pbs: (%i) choose signal (TC), tile:%x, trackdir:%i",v->unitnumber,  gp.new_tile, trackdir);
-							ftd = NPFRouteToStationOrTile(gp.new_tile, trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype, PBS_MODE_GREEN);
-
-							if (v->u.rail.force_proceed != 0)
-								goto green_light;
-
-							if (ftd.best_trackdir == 0xFF)
-								goto red_light;
-
-							// we found a way out of the pbs block
-							if (NPFGetFlag(&ftd.node, NPF_FLAG_PBS_EXIT)) {
-								if (NPFGetFlag(&ftd.node, NPF_FLAG_PBS_BLOCKED) || NPFGetFlag(&ftd.node, NPF_FLAG_PBS_RED))
-									goto red_light;
-								else {
-									v->u.rail.pbs_end_tile = ftd.node.tile;
-									v->u.rail.pbs_end_trackdir = ftd.node.direction;
-									goto green_light;
-								}
-
-							};
-
-						} else {
-							// we have already planned a path through this pbs block
-							// on entering the block, we reset our status
-							v->u.rail.pbs_status = PBS_STAT_NONE;
-							goto green_light;
-						};
-						DEBUG(pbs, 3) ("pbs: (%i) no green light found, or was no pbs-block",v->unitnumber);
-					};
-
 					/* Check if it's a red signal and that force proceed is not clicked. */
 					if ( (tracks>>16)&chosen_track && v->u.rail.force_proceed == 0) goto red_light;
 				} else {
@@ -3019,9 +2860,6 @@
 					/* The wagon is active, simply follow the prev vehicle. */
 					chosen_track = (byte)(_matching_tracks[GetDirectionToVehicle(prev, gp.x, gp.y)] & bits);
 				}
-green_light:
-				if (v->next == NULL)
-					PBSClearTrack(gp.old_tile, FIND_FIRST_BIT(v->u.rail.track));
 
 				/* make sure chosen track is a valid track */
 				assert(chosen_track==1 || chosen_track==2 || chosen_track==4 || chosen_track==8 || chosen_track==16 || chosen_track==32);
@@ -3050,12 +2888,12 @@
 				}
 
 				if (IsFrontEngine(v))
-				TrainMovedChangeSignals(gp.new_tile, enterdir);
+					TrainMovedChangeSignals(gp.new_tile, enterdir);
 
 				/* Signals can only change when the first
 				 * (above) or the last vehicle moves. */
 				if (v->next == NULL)
-				TrainMovedChangeSignals(gp.old_tile, (enterdir) ^ 2);
+					TrainMovedChangeSignals(gp.old_tile, (enterdir) ^ 2);
 
 				if (prev == NULL) {
 					AffectSpeedByDirChange(v, chosen_dir);
@@ -3164,17 +3002,6 @@
 	EndVehicleMove(v);
 	DeleteVehicle(v);
 
-	// clear up reserved pbs tracks
-	if (PBSTileReserved(v->tile) & v->u.rail.track) {
-		if (v == u) {
-			PBSClearPath(v->tile, FIND_FIRST_BIT(v->u.rail.track), v->u.rail.pbs_end_tile, v->u.rail.pbs_end_trackdir);
-			PBSClearPath(v->tile, FIND_FIRST_BIT(v->u.rail.track) + 8, v->u.rail.pbs_end_tile, v->u.rail.pbs_end_trackdir);
-		};
-		if (v->tile != u->tile) {
-			PBSClearTrack(v->tile, FIND_FIRST_BIT(v->u.rail.track));
-		};
-	}
-
 	if (!(v->u.rail.track & 0xC0))
 		SetSignalsOnBothDir(v->tile, FIND_FIRST_BIT(v->u.rail.track));
 
@@ -3302,7 +3129,6 @@
 	uint16 break_speed;
 	DiagDirection t;
 	uint32 ts;
-	byte trackdir;
 
 	t = v->breakdown_ctr;
 	if (t > 1) {
@@ -3339,12 +3165,6 @@
 	// determine the track status on the next tile.
 	ts = GetTileTrackStatus(tile, TRANSPORT_RAIL) & _reachable_tracks[t];
 
-	// if there are tracks on the new tile, pick one (trackdir will only be used when its a signal tile, in which case only 1 trackdir is accessible for us)
-	if (ts & TRACKDIR_BIT_MASK)
-		trackdir = FindFirstBit2x64(ts & TRACKDIR_BIT_MASK);
-	else
-		trackdir = INVALID_TRACKDIR;
-
 	/* Calc position within the current tile ?? */
 	x = v->x_pos & 0xF;
 	y = v->y_pos & 0xF;
@@ -3400,28 +3220,6 @@
 		return false;
 	}
 
-	if  (v->u.rail.pbs_status == PBS_STAT_HAS_PATH)
-		return true;
-
-	if ((trackdir != INVALID_TRACKDIR) && (PBSIsPbsSignal(tile,trackdir) && PBSIsPbsSegment(tile,trackdir)) && !(IsTileType(v->tile, MP_STATION) && (v->current_order.station == _m[v->tile].m2))) {
-		NPFFindStationOrTileData fstd;
-		NPFFoundTargetData ftd;
-
-		NPFFillWithOrderData(&fstd, v);
-
-		DEBUG(pbs, 2) ("pbs: (%i) choose signal (CEOL), tile:%x  trackdir:%i", v->unitnumber, tile, trackdir);
-		ftd = NPFRouteToStationOrTile(tile, trackdir, &fstd, TRANSPORT_RAIL, v->owner, v->u.rail.railtype, PBS_MODE_GREEN);
-
-		if (ftd.best_trackdir != 0xFF && NPFGetFlag(&ftd.node, NPF_FLAG_PBS_EXIT)) {
-			if (!(NPFGetFlag(&ftd.node, NPF_FLAG_PBS_BLOCKED) || NPFGetFlag(&ftd.node, NPF_FLAG_PBS_RED))) {
-				v->u.rail.pbs_status = PBS_STAT_HAS_PATH;
-				v->u.rail.pbs_end_tile = ftd.node.tile;
-				v->u.rail.pbs_end_trackdir = ftd.node.direction;
-				return true;
-			}
-		};
-	};
-
 	// slow down
 	v->vehstatus |= VS_TRAIN_SLOWING;
 	break_speed = _breakdown_speeds[x & 0xF];
@@ -3578,8 +3376,6 @@
 	const Depot* depot;
 	TrainFindDepotData tfdd;
 
-	if (PBSTileReserved(v->tile) & v->u.rail.track)     return;
-	if (v->u.rail.pbs_status == PBS_STAT_HAS_PATH)      return;
 	if (_patches.servint_trains == 0)                   return;
 	if (!VehicleNeedsService(v))                        return;
 	if (v->vehstatus & VS_STOPPED)                      return;