Loading

Revision differences

Old revision #ppqwyyw9sNew revision #phoeeb6pa
  1Index: src/pathfinder/follow_track.hpp  
  2===================================================================  
  3--- src/pathfinder/follow_track.hpp    (revision 27829)  
  4+++ src/pathfinder/follow_track.hpp    (working copy)  
  5@@ -438,6 +438,21 @@  
  6                 return true;  
  7             }  
  8         }  
  9+  
  10+        if (IsWaterTT()) {  
  11+            /* if we reached a dead end, we can reverse the ship and continue moving */  
  12+            m_exitdir = ReverseDiagDir(m_exitdir);  
  13+            /* new tile will be the same as old one */  
  14+            m_new_tile = m_old_tile;  
  15+            /* set new trackdir bits to all reachable trackdirs */  
  16+            QueryNewTileTrackStatus();  
  17+            m_new_td_bits &= DiagdirReachesTrackdirs(m_exitdir);  
  18+            if (m_new_td_bits != TRACKDIR_BIT_NONE) {  
  19+                /* we have some trackdirs reachable after reversal */  
  20+                return true;  
  21+            }  
  22+        }  
  23+  
  24         m_err = EC_NO_WAY;  
  25         return false;  
  26     }  
1Index: src/pathfinder/yapf/yapf.h  27Index: src/pathfinder/yapf/yapf.h  
2===================================================================  28===================================================================  
3--- src/pathfinder/yapf/yapf.h    (revision 27829)  29--- src/pathfinder/yapf/yapf.h    (revision 27829)  
  
101+    /** Called by YAPF to detect if node ends in the desired destination */  127+    /** Called by YAPF to detect if node ends in the desired destination */  
102+    inline bool PfDetectDestination(Node &n)  128+    inline bool PfDetectDestination(Node &n)  
103+    {  129+    {  
104+        bool bDest = IsShipDepotTile(n.m_segment_last_tile);  104+        bool bDest = IsShipDepotTile(n.m_segment_last_tile) && GetShipDepotPart(n.m_segment_last_tile) == DEPOT_PART_NORTH;
105+        return bDest;  131+        return bDest;  
106+    }  132+    }  
107+  133+  
108+    inline bool PfDetectDestinationTile(TileIndex tile, Trackdir trackdir)  134+    inline bool PfDetectDestinationTile(TileIndex tile, Trackdir trackdir)  
109+    {  135+    {  
110+        return IsShipDepotTile(tile);  110+        return IsShipDepotTile(n.m_segment_last_tile) && GetShipDepotPart(n.m_segment_last_tile) == DEPOT_PART_NORTH;
111+    }  137+    }  
112+  138+  
113+    /**  139+    /**  
  
203-     * other hand if we have set a maximum distance, any depot  229-     * other hand if we have set a maximum distance, any depot  
204-     * further away than max_distance can safely be ignored. */  230-     * further away than max_distance can safely be ignored. */  
205-    uint best_dist = max_distance == 0 ? UINT_MAX : max_distance + 1;  231-    uint best_dist = max_distance == 0 ? UINT_MAX : max_distance + 1;  
206+    if (IsShipDepotTile(v->tile)) return FindDepotData(v->tile, 0);  206+    if (IsShipDepotTile(v->tile) && GetShipDepotPart(v->tile) == DEPOT_PART_NORTH) return FindDepotData(v->tile, 0);
207   233   
208-    FOR_ALL_DEPOTS(depot) {  234-    FOR_ALL_DEPOTS(depot) {  
209-        TileIndex tile = depot->xy;  235-        TileIndex tile = depot->xy;