changeset 8236 | 8a5dd0b42e47 |
parent 8230 | 64f28fe2d5c8 |
child 8254 | 1496654ca5e7 |
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; |