From 543aae08937b3165fb115d2040bd238930bc19d4 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 17 Sep 2017 08:02:43 +0000 Subject: [PATCH] - Some tweaks and improvements in the experimental AI code. --- forge-ai/src/main/java/forge/ai/AiController.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 708c7882d11..cb39b94efd4 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1143,12 +1143,14 @@ public class AiController { int predictedMana = ComputerUtilMana.getAvailableManaEstimate(player, true); boolean canCastWithLandDrop = (predictedMana + 1 >= minCMCInHand) && !isTapLand; + boolean cantCastAnythingNow = predictedMana < minCMCInHand; boolean hasRelevantAbsOTB = !CardLists.filter(otb, new Predicate() { @Override public boolean apply(Card card) { boolean isTapLand = false; for (ReplacementEffect repl : card.getReplacementEffects()) { + // TODO: improve the detection of taplands if (repl.getParamOrDefault("Description", "").equals("CARDNAME enters the battlefield tapped.")) { isTapLand = true; } @@ -1177,7 +1179,6 @@ public class AiController { && ((params.get("ValidCard").contains("Land")) || (params.get("ValidCard").contains("Permanent")) && !params.get("ValidCard").contains("nonLand")) && "Battlefield".equals(params.get("Destination"))) { // Landfall and other similar triggers - System.out.println("LANDFALL: " + card); return true; } } @@ -1185,7 +1186,8 @@ public class AiController { } }).isEmpty(); - if (!canCastWithLandDrop && !hasLandfall && (!hasRelevantAbsOTB || isTapLand)) { + // TODO: add prediction for effects that will untap a tapland as it enters the battlefield + if (!canCastWithLandDrop && cantCastAnythingNow && !hasLandfall && (!hasRelevantAbsOTB || isTapLand)) { // Hopefully there's not much to do with the extra mana immediately, can wait for Main 2 return true; }