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

---
 src/net/sf/freecol/server/ai/REFAIPlayer.java | 29 ++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/net/sf/freecol/server/ai/REFAIPlayer.java 
b/src/net/sf/freecol/server/ai/REFAIPlayer.java
index 2679e6db6fe..956c0319aa1 100644
--- a/src/net/sf/freecol/server/ai/REFAIPlayer.java
+++ b/src/net/sf/freecol/server/ai/REFAIPlayer.java
@@ -29,7 +29,6 @@ import java.util.Map.Entry;
 import java.util.Random;
 import java.util.function.Function;
 import java.util.function.Predicate;
-import java.util.function.ToDoubleFunction;
 import java.util.function.ToIntFunction;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -38,8 +37,10 @@ import javax.xml.stream.XMLStreamException;
 
 import net.sf.freecol.common.io.FreeColXMLReader;
 import net.sf.freecol.common.model.Ability;
+import net.sf.freecol.common.model.AbstractGoods;
 import net.sf.freecol.common.model.Building;
 import net.sf.freecol.common.model.Colony;
+import net.sf.freecol.common.model.GoodsType;
 import net.sf.freecol.common.model.Location;
 import net.sf.freecol.common.model.PathNode;
 import net.sf.freecol.common.model.Player;
@@ -207,15 +208,25 @@ public class REFAIPlayer extends EuropeanAIPlayer {
                                    targets.size());
         int twidx = 0;
         for (TargetTuple t : targets) {
-            final ToDoubleFunction<Building> bdf = b ->
-                ((b.hasAbility(Ability.REPAIR_UNITS)) ? 1.5 : 1.0)
-                * product(b.getOutputs(), ag ->
-                    (ag.getType().getMilitary()) ? 2.0
-                    : (ag.getType().isBuildingMaterial()
-                        && ag.getType().isRefined()) ? 1.5
-                    : 1.0);
+            double building_prod = 1;
+            for (Building b : t.colony.getBuildings()) {
+                if (!(b.getLevel() > 1)) continue;
+
+                double d = ((b.hasAbility(Ability.REPAIR_UNITS)) ? 1.5 : 1.0);
+                for (AbstractGoods ag : b.getOutputs()) {
+                    GoodsType gt = ag.getType();
+
+                    // FIXME: move this into GoodsType
+                    if (gt.getMilitary())
+                        d *= 2.0;
+                    else if (gt.isBuildingMaterial() && gt.isRefined())
+                        d *= 1.5;
+                }
+                building_prod *= d;
+            }
+
             t.score *= 0.01 * (101 - Math.min(100, t.colony.getSoL()))
-                * product(t.colony.getBuildings(), b -> b.getLevel() > 1, bdf)
+                * building_prod
                 * ((6 - ((!t.colony.hasStockade()) ? 0
                             : t.colony.getStockade().getLevel())) / 6.0)
                 * (1.0 + 0.01 * (twiddle[twidx++] - percentTwiddle));
-- 
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