From 6ca637b8c149efe2cb8ccffccbfd98530f633d58 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Thu, 14 Feb 2019 19:07:06 +0100 Subject: 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(-) (limited to 'src/ship_cmd.cpp') diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 23786c17d..c4441cb15 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 */ -- cgit v1.2.3-54-g00ecf