From e69501e2ea9d993834c148c5a17948aca5df104c Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Thu, 14 Feb 2019 19:07:06 +0100 Subject: [PATCH] Fix #7226: Don't call ship pathfinders if there is no available track due to "forbid 90 deg turns". --- src/ship_cmd.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 23786c17d1493..c4441cb15946c 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -510,9 +510,20 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr return track; } -static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir) +/** + * Get the available water tracks on a tile for a ship entering a tile. + * @param tile The tile about to enter. + * @param dir The entry direction. + * @param trackdir The trackdir the ship has on the old tile. + * @return The available trackbits on the next tile. + */ +static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir, Trackdir trackdir) { - return GetTileShipTrackStatus(tile) & DiagdirReachesTracks(dir); + TrackBits tracks = GetTileShipTrackStatus(tile) & DiagdirReachesTracks(dir); + + if (_settings_game.pf.forbid_90_deg) tracks &= ~TrackCrossesTracks(TrackdirToTrack(trackdir)); + + return tracks; } static const byte _ship_subcoord[4][6][3] = { @@ -699,7 +710,7 @@ static void ShipController(Ship *v) DiagDirection diagdir = DiagdirBetweenTiles(gp.old_tile, gp.new_tile); assert(diagdir != INVALID_DIAGDIR); - tracks = GetAvailShipTracks(gp.new_tile, diagdir); + tracks = GetAvailShipTracks(gp.new_tile, diagdir, v->GetVehicleTrackdir()); if (tracks == TRACK_BIT_NONE) goto reverse_direction; /* Choose a direction, and continue if we find one */