|
|
|
@ -670,7 +670,7 @@ static void CheckDistanceBetweenShips(TileIndex tile, Ship *v, TrackBits tracks,
|
|
|
|
|
/* Bridge entrance */
|
|
|
|
|
if (IsBridgeTile(tile) && HandleSpeedOnAqueduct(v, tile, tile)) return;
|
|
|
|
|
|
|
|
|
|
scc.track_bits = v->state;
|
|
|
|
|
scc.track_bits = TrackToTrackBits(IsDiagonalTrack(track) ? track : TrackToOppositeTrack(track));
|
|
|
|
|
ti = TileIndexDiffCByDiagDir(_ship_search_directions[track][diagdir]);
|
|
|
|
|
scc.search_tile = TileAddWrap(tile, ti.x, ti.y);
|
|
|
|
|
if (scc.search_tile == INVALID_TILE) return;
|
|
|
|
@ -691,7 +691,11 @@ static void CheckDistanceBetweenShips(TileIndex tile, Ship *v, TrackBits tracks,
|
|
|
|
|
v->cur_speed /= scc.search_tile == tile ? 8 : 2;
|
|
|
|
|
|
|
|
|
|
/* Clean none wanted trackbits, including pathfinder track, TRACK_BIT_WORMHOLE and no 90 degree turns. */
|
|
|
|
|
tracks = IsDiagonalTrack(track) ? KillFirstBit(tracks) : (tracks & TRACK_BIT_CROSS);
|
|
|
|
|
if (IsDiagonalTrack(track)) {
|
|
|
|
|
ClrBit(tracks, track);
|
|
|
|
|
} else {
|
|
|
|
|
tracks &= TRACK_BIT_CROSS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Just follow track 1 tile and see if there is a track to follow. (try not to bang in coast or ship) */
|
|
|
|
|
while (tracks != TRACK_BIT_NONE) {
|
|
|
|
@ -701,7 +705,9 @@ static void CheckDistanceBetweenShips(TileIndex tile, Ship *v, TrackBits tracks,
|
|
|
|
|
TileIndex tile_check = TileAddWrap(tile, ti.x, ti.y);
|
|
|
|
|
if (tile_check == INVALID_TILE) continue;
|
|
|
|
|
|
|
|
|
|
if (HasVehicleOnPos(tile_check, VEH_SHIP, &scc, FindShipOnTile)) continue;
|
|
|
|
|
scc.search_tile = tile_check;
|
|
|
|
|
scc.track_bits = TrackToTrackBits(IsDiagonalTrack(track) ? track : TrackToOppositeTrack(track));
|
|
|
|
|
if (HasVehicleOnPos(scc.search_tile, VEH_SHIP, &scc, FindShipOnTile)) continue;
|
|
|
|
|
|
|
|
|
|
TrackBits bits = GetTileShipTrackStatus(tile_check) & DiagdirReachesTracks(_ship_search_directions[track][diagdir]);
|
|
|
|
|
if (!IsDiagonalTrack(track)) bits &= TRACK_BIT_CROSS; // No 90 degree turns.
|
|
|
|
|