From: "Enrico Weigelt, metux IT consult" <enrico.weig...@gr13.net>

---
 src/net/sf/freecol/common/model/Unit.java | 51 ++++++++++++++++++++-----------
 1 file changed, 34 insertions(+), 17 deletions(-)

diff --git a/src/net/sf/freecol/common/model/Unit.java 
b/src/net/sf/freecol/common/model/Unit.java
index d20ac2928f6..5be31dd2bc9 100644
--- a/src/net/sf/freecol/common/model/Unit.java
+++ b/src/net/sf/freecol/common/model/Unit.java
@@ -2997,12 +2997,6 @@ public class Unit extends GoodsLocation
         final Tile srcTile = getTile();
         final Tile dstTile = dst.getTile();
         final int dstCont = (dstTile == null) ? -1 : dstTile.getContiguity();
-        final Comparator<Settlement> settlementComparator
-            = cachingIntComparator(s -> {
-                    PathNode p = findPath(s);
-                    return (p == null) ? INFINITY
-                    : p.getTotalTurns() + dstTile.getDistanceTo(s.getTile());
-                });
 
         int type;
         if (isNaval()) {
@@ -3047,20 +3041,43 @@ public class Unit extends GoodsLocation
         case 2:
             // Ocean travel required, destination blocked.
             // Find the closest available connected port.
-            final Predicate<Settlement> portPredicate = s ->
-                s != ignoreSrc && s != ignoreDst;
-            sett = minimize(getOwner().getPorts(), portPredicate,
-                            settlementComparator);
-            path = (sett == null) ? null : this.findPath(sett);
+            sett = null;
+            path = null;
+            int sett_turns = INFINITY;
+            for (Settlement s : getOwner().getPorts()) {
+                if (!(s != ignoreSrc && s != ignoreDst)) continue;
+
+                PathNode p = findPath(s);
+                int turns = (p == null ? INFINITY
+                    : p.getTotalTurns() + dstTile.getDistanceTo(s.getTile()));
+
+                if (sett == null || turns < sett_turns) {
+                    sett = s;
+                    sett_turns = turns;
+                    path = p;
+                }
+            }
+
             break;
         case 3:
             // Land travel.  Find nearby settlement with correct contiguity.
-            final Predicate<Settlement> contiguityPred = s ->
-                s != ignoreSrc && s != ignoreDst
-                    && s.getTile().getContiguity() == dstCont;
-            sett = minimize(getOwner().getSettlements(), contiguityPred,
-                            settlementComparator);
-            path = (sett == null) ? null : this.findPath(sett);
+            sett = null;
+            path = null;
+            sett_turns = INFINITY;
+            for (Settlement s : getOwner().getSettlements()) {
+                if (!(s != ignoreSrc && s != ignoreDst && 
s.getTile().getContiguity() == dstCont))
+                    continue;
+
+                PathNode p = findPath(s);
+                int turns = (p == null ? INFINITY
+                    : p.getTotalTurns() + dstTile.getDistanceTo(s.getTile()));
+
+                if (sett == null || turns < sett_turns) {
+                    sett = s;
+                    sett_turns = turns;
+                    path = p;
+                }
+            }
             break;
         }
         return (path != null) ? path
-- 
2.11.0.rc0.7.gbe5a750


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Freecol-developers mailing list
Freecol-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freecol-developers

Reply via email to