From 2d2ddac2e8aef16acd295a025485764a1aafef93 Mon Sep 17 00:00:00 2001 From: Agetian Date: Tue, 20 Nov 2018 22:47:54 +0300 Subject: [PATCH] - Initial setup for advanced Flash. --- forge-ai/src/main/java/forge/ai/AiProps.java | 3 +- .../forge/ai/ability/PermanentCreatureAi.java | 34 ++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiProps.java b/forge-ai/src/main/java/forge/ai/AiProps.java index aefc58df58e..8fa09018fac 100644 --- a/forge-ai/src/main/java/forge/ai/AiProps.java +++ b/forge-ai/src/main/java/forge/ai/AiProps.java @@ -113,7 +113,8 @@ public enum AiProps { /** */ MOJHOSTO_CHANCE_TO_PREFER_JHOIRA_OVER_MOMIR ("50"), /** */ MOJHOSTO_CHANCE_TO_USE_JHOIRA_COPY_INSTANT ("20"), /** */ AI_IN_DANGER_THRESHOLD("4"), /** */ - AI_IN_DANGER_MAX_THRESHOLD("4"); /** */ + AI_IN_DANGER_MAX_THRESHOLD("4"), /** */ + FLASH_ENABLE_ADVANCED_LOGIC("true"); /** */ // Experimental features, must be promoted or removed after extensive testing and, ideally, defaulting // <-- There are no experimental options here --> diff --git a/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java b/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java index 1b5dd90d4b1..ba2ee36c339 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java @@ -1,8 +1,6 @@ package forge.ai.ability; -import forge.ai.ComputerUtil; -import forge.ai.ComputerUtilCard; -import forge.ai.ComputerUtilCost; +import forge.ai.*; import forge.card.mana.ManaCost; import forge.game.Game; import forge.game.card.Card; @@ -79,16 +77,26 @@ public class PermanentCreatureAi extends PermanentAi { return false; } - // save cards with flash for surprise blocking - if (card.withFlash(ai) - && (ai.isUnlimitedHandSize() || ai.getCardsIn(ZoneType.Hand).size() <= ai.getMaxHandSize() - || ph.getPhase().isBefore(PhaseType.END_OF_TURN)) - && ai.getManaPool().totalMana() <= 0 - && (ph.isPlayerTurn(ai) || ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) - && (!card.hasETBTrigger(true) || card.hasSVar("AmbushAI")) && game.getStack().isEmpty() - && !ComputerUtil.castPermanentInMain1(ai, sa)) { - // AiPlayDecision.AnotherTime; - return false; + // Flash logic + boolean advancedFlash = false; + if (ai.getController().isAI()) { + advancedFlash = ((PlayerControllerAi)ai.getController()).getAi().getBooleanProperty(AiProps.FLASH_ENABLE_ADVANCED_LOGIC); + } + if (advancedFlash) { + + } else { + // save cards with flash for surprise blocking + if (card.withFlash(ai) + && (ai.isUnlimitedHandSize() || ai.getCardsIn(ZoneType.Hand).size() <= ai.getMaxHandSize() + || ph.getPhase().isBefore(PhaseType.END_OF_TURN)) + && ai.getManaPool().totalMana() <= 0 + && (ph.isPlayerTurn(ai) || ph.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) + && (!card.hasETBTrigger(true) && !card.hasSVar("AmbushAI")) + && game.getStack().isEmpty() + && !ComputerUtil.castPermanentInMain1(ai, sa)) { + // AiPlayDecision.AnotherTime; + return false; + } } return super.checkPhaseRestrictions(ai, sa, ph);