1271 |
1271 |
1272 best_track = INVALID_TRACKDIR; |
1272 best_track = INVALID_TRACKDIR; |
1273 uint best_dist = (uint)-1; |
1273 uint best_dist = (uint)-1; |
1274 uint best_maxlen = (uint)-1; |
1274 uint best_maxlen = (uint)-1; |
1275 uint bitmask = (uint)trackdirs; |
1275 uint bitmask = (uint)trackdirs; |
1276 for (int i = 0; bitmask != 0; bitmask >>= 1, i++) { |
1276 uint i; |
1277 if (HasBit(bitmask, 0)) { |
1277 FOR_EACH_SET_BIT(i, bitmask) { |
1278 if (best_track == INVALID_TRACKDIR) best_track = (Trackdir)i; // in case we don't find the path, just pick a track |
1278 if (best_track == INVALID_TRACKDIR) best_track = (Trackdir)i; // in case we don't find the path, just pick a track |
1279 frd.maxtracklen = (uint)-1; |
1279 frd.maxtracklen = (uint)-1; |
1280 frd.mindist = (uint)-1; |
1280 frd.mindist = (uint)-1; |
1281 FollowTrack(tile, 0x2000 | TRANSPORT_ROAD, v->u.road.compatible_roadtypes, _road_pf_directions[i], EnumRoadTrackFindDist, NULL, &frd); |
1281 FollowTrack(tile, 0x2000 | TRANSPORT_ROAD, v->u.road.compatible_roadtypes, _road_pf_directions[i], EnumRoadTrackFindDist, NULL, &frd); |
1282 |
1282 |
1283 if (frd.mindist < best_dist || (frd.mindist == best_dist && frd.maxtracklen < best_maxlen)) { |
1283 if (frd.mindist < best_dist || (frd.mindist == best_dist && frd.maxtracklen < best_maxlen)) { |
1284 best_dist = frd.mindist; |
1284 best_dist = frd.mindist; |
1285 best_maxlen = frd.maxtracklen; |
1285 best_maxlen = frd.maxtracklen; |
1286 best_track = (Trackdir)i; |
1286 best_track = (Trackdir)i; |
1287 } |
|
1288 } |
1287 } |
1289 } |
1288 } |
1290 } |
1289 } |
1291 |
1290 |
1292 found_best_track:; |
1291 found_best_track:; |