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