src/roadveh_cmd.cpp
changeset 8236 8a5dd0b42e47
parent 8230 64f28fe2d5c8
child 8254 1496654ca5e7
equal deleted inserted replaced
8235:7987f051dd76 8236:8a5dd0b42e47
   420 	} else if (_patches.new_pathfinding_all) {
   420 	} else if (_patches.new_pathfinding_all) {
   421 		NPFFoundTargetData ftd;
   421 		NPFFoundTargetData ftd;
   422 		/* See where we are now */
   422 		/* See where we are now */
   423 		Trackdir trackdir = GetVehicleTrackdir(v);
   423 		Trackdir trackdir = GetVehicleTrackdir(v);
   424 
   424 
   425 		ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, v->tile, ReverseTrackdir(trackdir), TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPE, 0);
   425 		ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, v->tile, ReverseTrackdir(trackdir), TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPES, 0);
   426 		if (ftd.best_bird_dist == 0) {
   426 		if (ftd.best_bird_dist == 0) {
   427 			return GetDepotByTile(ftd.node.tile); /* Target found */
   427 			return GetDepotByTile(ftd.node.tile); /* Target found */
   428 		} else {
   428 		} else {
   429 			return NULL; /* Target not found */
   429 			return NULL; /* Target not found */
   430 		}
   430 		}
  1124 		frd->mindist = dist;
  1124 		frd->mindist = dist;
  1125 	}
  1125 	}
  1126 	return false;
  1126 	return false;
  1127 }
  1127 }
  1128 
  1128 
  1129 static inline NPFFoundTargetData PerfNPFRouteToStationOrTile(TileIndex tile, Trackdir trackdir, NPFFindStationOrTileData* target, TransportType type, uint sub_type, Owner owner, RailTypeMask railtypes)
  1129 static inline NPFFoundTargetData PerfNPFRouteToStationOrTile(TileIndex tile, Trackdir trackdir, NPFFindStationOrTileData* target, TransportType type, uint sub_type, Owner owner, RailTypes railtypes)
  1130 {
  1130 {
  1131 
  1131 
  1132 	void* perf = NpfBeginInterval();
  1132 	void* perf = NpfBeginInterval();
  1133 	NPFFoundTargetData ret = NPFRouteToStationOrTile(tile, trackdir, target, type, sub_type, owner, railtypes);
  1133 	NPFFoundTargetData ret = NPFRouteToStationOrTile(tile, trackdir, target, type, sub_type, owner, railtypes);
  1134 	int t = NpfEndInterval(perf);
  1134 	int t = NpfEndInterval(perf);
  1226 
  1226 
  1227 		NPFFillWithOrderData(&fstd, v);
  1227 		NPFFillWithOrderData(&fstd, v);
  1228 		trackdir = DiagdirToDiagTrackdir(enterdir);
  1228 		trackdir = DiagdirToDiagTrackdir(enterdir);
  1229 		//debug("Finding path. Enterdir: %d, Trackdir: %d", enterdir, trackdir);
  1229 		//debug("Finding path. Enterdir: %d, Trackdir: %d", enterdir, trackdir);
  1230 
  1230 
  1231 		ftd = PerfNPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, &fstd, TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPE);
  1231 		ftd = PerfNPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, &fstd, TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPES);
  1232 		if (ftd.best_trackdir == INVALID_TRACKDIR) {
  1232 		if (ftd.best_trackdir == INVALID_TRACKDIR) {
  1233 			/* We are already at our target. Just do something
  1233 			/* We are already at our target. Just do something
  1234 			 * @todo: maybe display error?
  1234 			 * @todo: maybe display error?
  1235 			 * @todo: go straight ahead if possible? */
  1235 			 * @todo: go straight ahead if possible? */
  1236 			return_track(FindFirstBit2x64(trackdirs));
  1236 			return_track(FindFirstBit2x64(trackdirs));
  1308 		assert(trackdir != INVALID_TRACKDIR);
  1308 		assert(trackdir != INVALID_TRACKDIR);
  1309 
  1309 
  1310 		fstd.dest_coords = tile;
  1310 		fstd.dest_coords = tile;
  1311 		fstd.station_index = INVALID_STATION; // indicates that the destination is a tile, not a station
  1311 		fstd.station_index = INVALID_STATION; // indicates that the destination is a tile, not a station
  1312 
  1312 
  1313 		dist = NPFRouteToStationOrTile(v->tile, trackdir, &fstd, TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPE).best_path_dist;
  1313 		dist = NPFRouteToStationOrTile(v->tile, trackdir, &fstd, TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPES).best_path_dist;
  1314 		/* change units from NPF_TILE_LENGTH to # of tiles */
  1314 		/* change units from NPF_TILE_LENGTH to # of tiles */
  1315 		if (dist != UINT_MAX)
  1315 		if (dist != UINT_MAX)
  1316 			dist = (dist + NPF_TILE_LENGTH - 1) / NPF_TILE_LENGTH;
  1316 			dist = (dist + NPF_TILE_LENGTH - 1) / NPF_TILE_LENGTH;
  1317 	}
  1317 	}
  1318 	return dist;
  1318 	return dist;