From fae995f1892c7a3aa2b6396ad7fa7273ee88a9c1 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Thu, 24 Jan 2013 23:00:51 +0000 Subject: [PATCH] forge.game.ai created - just a small step towards AI isolation --- .gitattributes | 13 +- src/main/java/forge/Card.java | 57 +++++- src/main/java/forge/GameAction.java | 2 +- src/main/java/forge/GameActionUtil.java | 2 +- .../card/abilityfactory/AbilityFactory.java | 2 +- .../card/abilityfactory/SpellAiLogic.java | 2 +- .../card/abilityfactory/ai/AttachAi.java | 2 +- .../card/abilityfactory/ai/ChangeZoneAi.java | 4 +- .../abilityfactory/ai/ChooseCardNameAi.java | 2 +- .../card/abilityfactory/ai/CounterAi.java | 2 +- .../card/abilityfactory/ai/CountersPutAi.java | 2 +- .../abilityfactory/ai/CountersPutAllAi.java | 2 +- .../card/abilityfactory/ai/DamageAllAi.java | 2 +- .../card/abilityfactory/ai/DamageDealAi.java | 2 +- .../card/abilityfactory/ai/DestroyAi.java | 2 +- .../card/abilityfactory/ai/DestroyAllAi.java | 2 +- .../card/abilityfactory/ai/DiscardAi.java | 2 +- .../forge/card/abilityfactory/ai/DrawAi.java | 2 +- .../card/abilityfactory/ai/LifeGainAi.java | 2 +- .../card/abilityfactory/ai/LifeLoseAi.java | 2 +- .../card/abilityfactory/ai/LifeSetAi.java | 2 +- .../forge/card/abilityfactory/ai/MillAi.java | 2 +- .../ai/PermanentCreatureAi.java | 2 +- .../ai/PermanentNoncreatureAi.java | 2 +- .../card/abilityfactory/ai/PoisonAi.java | 2 +- .../forge/card/abilityfactory/ai/PumpAi.java | 2 +- .../card/abilityfactory/ai/PumpAllAi.java | 2 +- .../card/abilityfactory/ai/SacrificeAi.java | 2 +- .../abilityfactory/ai/SacrificeAllAi.java | 2 +- .../card/abilityfactory/ai/StoreSVarAi.java | 2 +- .../card/abilityfactory/ai/TapAiBase.java | 2 +- .../forge/card/abilityfactory/ai/TokenAi.java | 2 +- .../card/abilityfactory/ai/UnattachAllAi.java | 2 +- .../abilityfactory/effects/DiscardEffect.java | 2 +- .../abilityfactory/effects/PlayEffect.java | 2 +- .../effects/SacrificeEffect.java | 2 +- .../forge/card/cardfactory/CardFactory.java | 2 +- .../cardfactory/CardFactoryArtifacts.java | 2 +- .../cardfactory/CardFactorySorceries.java | 2 +- .../card/cardfactory/CardFactoryUtil.java | 2 +- .../java/forge/card/cost/CostDiscard.java | 2 +- src/main/java/forge/card/cost/CostExile.java | 2 +- src/main/java/forge/card/cost/CostMana.java | 2 +- src/main/java/forge/card/cost/CostReturn.java | 2 +- src/main/java/forge/card/cost/CostReveal.java | 2 +- .../java/forge/card/cost/CostSacrifice.java | 2 +- .../java/forge/card/cost/CostTapType.java | 2 +- .../java/forge/card/cost/CostUntapType.java | 2 +- src/main/java/forge/card/cost/CostUtil.java | 2 +- .../card/replacement/ReplacementHandler.java | 2 +- .../card/spellability/SpellPermanent.java | 9 +- .../forge/card/trigger/TriggerHandler.java | 2 +- .../forge/card/trigger/WrappedAbility.java | 2 +- .../forge/control/input/InputMulligan.java | 2 +- .../AiController.java} | 172 ++---------------- .../AiInputBlock.java} | 7 +- .../AiInputCommon.java} | 83 ++++++--- .../game/{player => ai}/ComputerUtil.java | 42 ++++- .../{player => ai}/ComputerUtilAttack.java | 3 +- .../{player => ai}/ComputerUtilBlock.java | 3 +- .../java/forge/game/phase/CombatUtil.java | 4 +- src/main/java/forge/game/phase/Upkeep.java | 2 +- src/main/java/forge/game/player/AIPlayer.java | 10 +- src/main/java/forge/game/player/Computer.java | 56 ------ src/main/java/forge/game/zone/MagicStack.java | 2 +- 65 files changed, 254 insertions(+), 313 deletions(-) rename src/main/java/forge/game/{player/ComputerAIGeneral.java => ai/AiController.java} (54%) rename src/main/java/forge/game/{player/ComputerAiInputBlock.java => ai/AiInputBlock.java} (82%) rename src/main/java/forge/game/{player/ComputerAIInput.java => ai/AiInputCommon.java} (58%) rename src/main/java/forge/game/{player => ai}/ComputerUtil.java (98%) rename src/main/java/forge/game/{player => ai}/ComputerUtilAttack.java (99%) rename src/main/java/forge/game/{player => ai}/ComputerUtilBlock.java (99%) delete mode 100644 src/main/java/forge/game/player/Computer.java diff --git a/.gitattributes b/.gitattributes index aa2e913c3b3..f808adb5506 100644 --- a/.gitattributes +++ b/.gitattributes @@ -13621,6 +13621,12 @@ src/main/java/forge/game/MatchController.java -text src/main/java/forge/game/MatchStartHelper.java -text src/main/java/forge/game/PlanarDice.java -text src/main/java/forge/game/PlayerStartConditions.java -text +src/main/java/forge/game/ai/AiController.java svneol=native#text/plain +src/main/java/forge/game/ai/AiInputBlock.java -text +src/main/java/forge/game/ai/AiInputCommon.java svneol=native#text/plain +src/main/java/forge/game/ai/ComputerUtil.java svneol=native#text/plain +src/main/java/forge/game/ai/ComputerUtilAttack.java svneol=native#text/plain +src/main/java/forge/game/ai/ComputerUtilBlock.java svneol=native#text/plain src/main/java/forge/game/event/BlockerAssignedEvent.java -text src/main/java/forge/game/event/CardDamagedEvent.java -text src/main/java/forge/game/event/CardDestroyedEvent.java -text @@ -13676,13 +13682,6 @@ src/main/java/forge/game/phase/Untap.java -text src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain src/main/java/forge/game/phase/package-info.java svneol=native#text/plain src/main/java/forge/game/player/AIPlayer.java svneol=native#text/plain -src/main/java/forge/game/player/Computer.java svneol=native#text/plain -src/main/java/forge/game/player/ComputerAIGeneral.java svneol=native#text/plain -src/main/java/forge/game/player/ComputerAIInput.java svneol=native#text/plain -src/main/java/forge/game/player/ComputerAiInputBlock.java -text -src/main/java/forge/game/player/ComputerUtil.java svneol=native#text/plain -src/main/java/forge/game/player/ComputerUtilAttack.java svneol=native#text/plain -src/main/java/forge/game/player/ComputerUtilBlock.java svneol=native#text/plain src/main/java/forge/game/player/HumanPlayer.java svneol=native#text/plain src/main/java/forge/game/player/LobbyPlayer.java -text src/main/java/forge/game/player/Player.java svneol=native#text/plain diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 7ad63f38d1d..9f2ecfe7aae 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -43,6 +43,7 @@ import forge.card.abilityfactory.ApiType; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.mana.ManaCostBeingPaid; +import forge.card.replacement.ReplaceMoved; import forge.card.replacement.ReplacementEffect; import forge.card.replacement.ReplacementResult; import forge.card.spellability.AbilityManaPart; @@ -57,12 +58,12 @@ import forge.card.trigger.TriggerType; import forge.card.trigger.ZCTrigger; import forge.game.GameState; import forge.game.GlobalRuleChange; +import forge.game.ai.ComputerUtil; import forge.game.event.CounterAddedEvent; import forge.game.event.CardEquippedEvent; import forge.game.event.CounterRemovedEvent; import forge.game.event.SetTappedEvent; import forge.game.phase.Combat; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.item.CardDb; @@ -9069,4 +9070,58 @@ public class Card extends GameEntity implements Comparable { clearBlockedThisTurn(); } + /** + *

+ * hasETBTrigger. + *

+ * + * @param card + * a {@link forge.Card} object. + * @return a boolean. + */ + public boolean hasETBTrigger() { + for (final Trigger tr : this.getTriggers()) { + final HashMap params = tr.getMapParams(); + if (tr.getMode() != TriggerType.ChangesZone) { + continue; + } + + if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) { + continue; + } + + if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) { + continue; + } + return true; + } + return false; + } + + /** + *

+ * hasETBTrigger. + *

+ * + * @return a boolean. + */ + public boolean hasETBReplacement() { + for (final ReplacementEffect re : getReplacementEffects()) { + final HashMap params = re.getMapParams(); + if (!(re instanceof ReplaceMoved)) { + continue; + } + + if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) { + continue; + } + + if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) { + continue; + } + return true; + } + return false; + } + } // end Card class diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index bb44b8dcdbe..7c9b706807c 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -59,11 +59,11 @@ import forge.game.GameLossReason; import forge.game.GameState; import forge.game.GlobalRuleChange; import forge.game.MatchController; +import forge.game.ai.ComputerUtil; import forge.game.event.CardDestroyedEvent; import forge.game.event.CardRegeneratedEvent; import forge.game.event.CardSacrificedEvent; import forge.game.event.DuelOutcomeEvent; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerType; import forge.game.zone.PlayerZone; diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/GameActionUtil.java index c49187635ad..4d0350683f4 100644 --- a/src/main/java/forge/GameActionUtil.java +++ b/src/main/java/forge/GameActionUtil.java @@ -54,10 +54,10 @@ import forge.control.input.InputPayDiscardCost; import forge.control.input.InputPayManaCostAbility; import forge.control.input.InputPayReturnCost; import forge.game.GameState; +import forge.game.ai.ComputerUtil; import forge.game.event.CardDamagedEvent; import forge.game.event.FlipCoinEvent; import forge.game.event.LifeLossEvent; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java index b27a3c61379..e28aa824f45 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java @@ -43,8 +43,8 @@ import forge.card.spellability.SpellAbilityCondition; import forge.card.spellability.SpellAbilityRestriction; import forge.card.spellability.Target; import forge.game.GameState; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/abilityfactory/SpellAiLogic.java b/src/main/java/forge/card/abilityfactory/SpellAiLogic.java index 319a69b0c3c..cb0f956c4e1 100644 --- a/src/main/java/forge/card/abilityfactory/SpellAiLogic.java +++ b/src/main/java/forge/card/abilityfactory/SpellAiLogic.java @@ -3,7 +3,7 @@ package forge.card.abilityfactory; import forge.card.spellability.AbilitySub; import forge.card.spellability.SpellAbility; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; public abstract class SpellAiLogic { diff --git a/src/main/java/forge/card/abilityfactory/ai/AttachAi.java b/src/main/java/forge/card/abilityfactory/ai/AttachAi.java index 28c3f894288..c64c1f1f927 100644 --- a/src/main/java/forge/card/abilityfactory/ai/AttachAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/AttachAi.java @@ -24,10 +24,10 @@ import forge.card.cost.Cost; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; import forge.card.staticability.StaticAbility; +import forge.game.ai.ComputerUtil; import forge.game.phase.CombatUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java index 9dd3434b458..4f12740a910 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java @@ -31,11 +31,11 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellPermanent; import forge.card.spellability.Target; import forge.game.GlobalRuleChange; +import forge.game.ai.ComputerUtil; +import forge.game.ai.ComputerUtilBlock; import forge.game.phase.Combat; import forge.game.phase.CombatUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; -import forge.game.player.ComputerUtilBlock; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java b/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java index 06832d4bbc8..72e7d5c8b74 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java @@ -3,7 +3,7 @@ package forge.card.abilityfactory.ai; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; public class ChooseCardNameAi extends SpellAiLogic { diff --git a/src/main/java/forge/card/abilityfactory/ai/CounterAi.java b/src/main/java/forge/card/abilityfactory/ai/CounterAi.java index 76cc06d4821..3cdac35b087 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CounterAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CounterAi.java @@ -10,7 +10,7 @@ import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; import forge.card.spellability.TargetSelection; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java index 02f44b4df3a..4b276ff76a5 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java @@ -17,8 +17,8 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java index 1c978fa829f..1784e837788 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java @@ -15,9 +15,9 @@ import forge.card.cost.CostUtil; import forge.card.spellability.AbilitySub; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java index 8b783d29465..dfb9ec48562 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java @@ -16,7 +16,7 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java b/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java index a1a9b6d95cb..694ad3e0672 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java @@ -16,9 +16,9 @@ import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; import forge.card.spellability.TargetSelection; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java b/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java index b2f1f789f01..c9b96d28963 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java @@ -19,7 +19,7 @@ import forge.card.cost.CostSacrifice; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java index de9c26fa0c4..fb69e7ab226 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java @@ -13,7 +13,7 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java b/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java index 9beabf01614..0f3e6541b43 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java @@ -11,8 +11,8 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/DrawAi.java b/src/main/java/forge/card/abilityfactory/ai/DrawAi.java index f58e560bf28..12b7cbbcd20 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DrawAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DrawAi.java @@ -35,8 +35,8 @@ import forge.card.cost.CostUtil; import forge.card.spellability.AbilitySub; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java index df0f88e36a5..b8309d129c8 100644 --- a/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java @@ -11,9 +11,9 @@ import forge.card.cost.CostUtil; import forge.card.spellability.AbilitySub; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.CombatUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java index ef780b16764..755c7008995 100644 --- a/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java @@ -11,8 +11,8 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java index 6ea8dc26e8c..0e64f8120ce 100644 --- a/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java @@ -9,8 +9,8 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/MillAi.java b/src/main/java/forge/card/abilityfactory/ai/MillAi.java index 10980dedb4c..df5f9d242b7 100644 --- a/src/main/java/forge/card/abilityfactory/ai/MillAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/MillAi.java @@ -11,8 +11,8 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java b/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java index 818a9f5c572..cd8704353be 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java @@ -11,8 +11,8 @@ import forge.Singletons; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; import forge.game.GameState; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java b/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java index 4bafbc76d3e..54391efcbb5 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java @@ -4,8 +4,8 @@ import forge.Singletons; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; import forge.game.GameState; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; /** diff --git a/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java b/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java index dfc33d04bed..897454f01d9 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java @@ -10,8 +10,8 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; public class PoisonAi extends SpellAiLogic { diff --git a/src/main/java/forge/card/abilityfactory/ai/PumpAi.java b/src/main/java/forge/card/abilityfactory/ai/PumpAi.java index 3a7c10c187a..e910584e072 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PumpAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PumpAi.java @@ -16,9 +16,9 @@ import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbilityRestriction; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java b/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java index 61affecb3cf..d04418def66 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java @@ -13,9 +13,9 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.CombatUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java b/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java index 4d5e5e711d4..e04cf487a30 100644 --- a/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java @@ -8,7 +8,7 @@ import forge.card.abilityfactory.SpellAiLogic; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java b/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java index 79ff66857a8..a6d6b80b461 100644 --- a/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java @@ -10,7 +10,7 @@ import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java b/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java index 3b167f58007..058c01788d3 100644 --- a/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java @@ -4,8 +4,8 @@ import forge.Card; import forge.Singletons; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; +import forge.game.ai.ComputerUtil; import forge.game.phase.CombatUtil; -import forge.game.player.ComputerUtil; import forge.game.player.Player; public class StoreSVarAi extends SpellAiLogic { diff --git a/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java b/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java index 8a044a63a94..94e52e1de9e 100644 --- a/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java +++ b/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java @@ -14,10 +14,10 @@ import forge.card.abilityfactory.SpellAiLogic; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.CombatUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/abilityfactory/ai/TokenAi.java b/src/main/java/forge/card/abilityfactory/ai/TokenAi.java index c18bfaea4d3..8dad14c9c0c 100644 --- a/src/main/java/forge/card/abilityfactory/ai/TokenAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/TokenAi.java @@ -10,9 +10,9 @@ import forge.card.cost.Cost; import forge.card.cost.CostUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java b/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java index 5ff92ec3923..6e5f7f02269 100644 --- a/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java @@ -11,8 +11,8 @@ import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.util.MyRandom; diff --git a/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java b/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java index bfa6a942a03..bd1868a05c4 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java @@ -14,7 +14,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java b/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java index 942658e0921..f871e8bfabb 100644 --- a/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java @@ -23,7 +23,7 @@ import forge.card.spellability.Spell; import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbilityRestriction; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java b/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java index 9a6baa92972..209b4aa5674 100644 --- a/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java @@ -9,7 +9,7 @@ import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.SpellEffect; import forge.card.spellability.SpellAbility; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index f0b9d39597f..3a8926db3a8 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -33,7 +33,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellPermanent; import forge.card.spellability.Target; import forge.error.ErrorViewer; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.gui.GuiUtils; import forge.item.CardDb; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java index 5ee526a0c61..e9d9d4153c6 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java @@ -17,7 +17,7 @@ import forge.card.spellability.AbilityActivated; import forge.card.spellability.Target; import forge.control.input.Input; import forge.control.input.InputSelectManyCards; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.Zone; diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index abac0e177cb..09466d0b0a7 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -48,7 +48,7 @@ import forge.card.spellability.Target; import forge.control.input.Input; import forge.control.input.InputPayManaCost; import forge.control.input.InputPayManaCostAbility; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerUtil; import forge.game.zone.PlayerZone; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 9045d7aea7c..74a0d588ae3 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -70,10 +70,10 @@ import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.control.input.InputPayManaCostUtil; import forge.game.GameState; +import forge.game.ai.ComputerUtil; import forge.game.event.TokenCreatedEvent; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.Zone; diff --git a/src/main/java/forge/card/cost/CostDiscard.java b/src/main/java/forge/card/cost/CostDiscard.java index 7857af9c011..57c469a7cdb 100644 --- a/src/main/java/forge/card/cost/CostDiscard.java +++ b/src/main/java/forge/card/cost/CostDiscard.java @@ -31,7 +31,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.Zone; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/cost/CostExile.java b/src/main/java/forge/card/cost/CostExile.java index 7d82bf3c67f..dbcbeefcd66 100644 --- a/src/main/java/forge/card/cost/CostExile.java +++ b/src/main/java/forge/card/cost/CostExile.java @@ -34,7 +34,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbilityStackInstance; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/cost/CostMana.java b/src/main/java/forge/card/cost/CostMana.java index 400ab44dee2..5bd2c7d18f4 100644 --- a/src/main/java/forge/card/cost/CostMana.java +++ b/src/main/java/forge/card/cost/CostMana.java @@ -27,7 +27,7 @@ import forge.control.input.Input; import forge.control.input.InputPayManaCost2; import forge.control.input.InputPayManaX; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; /** diff --git a/src/main/java/forge/card/cost/CostReturn.java b/src/main/java/forge/card/cost/CostReturn.java index 680cbf7c52d..234e0535195 100644 --- a/src/main/java/forge/card/cost/CostReturn.java +++ b/src/main/java/forge/card/cost/CostReturn.java @@ -30,7 +30,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.match.CMatchUI; diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java index d878bd94fad..cb0edb069c2 100644 --- a/src/main/java/forge/card/cost/CostReveal.java +++ b/src/main/java/forge/card/cost/CostReveal.java @@ -28,7 +28,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.Zone; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/cost/CostSacrifice.java b/src/main/java/forge/card/cost/CostSacrifice.java index 3b8af46fe29..7fa3db4999a 100644 --- a/src/main/java/forge/card/cost/CostSacrifice.java +++ b/src/main/java/forge/card/cost/CostSacrifice.java @@ -30,7 +30,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.match.CMatchUI; diff --git a/src/main/java/forge/card/cost/CostTapType.java b/src/main/java/forge/card/cost/CostTapType.java index 02e526b05c4..633c8987f6b 100644 --- a/src/main/java/forge/card/cost/CostTapType.java +++ b/src/main/java/forge/card/cost/CostTapType.java @@ -29,7 +29,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.Zone; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/cost/CostUntapType.java b/src/main/java/forge/card/cost/CostUntapType.java index 762d1b998b6..9ae57fecaaf 100644 --- a/src/main/java/forge/card/cost/CostUntapType.java +++ b/src/main/java/forge/card/cost/CostUntapType.java @@ -28,7 +28,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.Zone; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/cost/CostUtil.java b/src/main/java/forge/card/cost/CostUtil.java index b68758c9c08..a18554eb9b1 100644 --- a/src/main/java/forge/card/cost/CostUtil.java +++ b/src/main/java/forge/card/cost/CostUtil.java @@ -27,7 +27,7 @@ import forge.CounterType; import forge.card.abilityfactory.AbilityFactory; import forge.card.mana.ManaCostBeingPaid; import forge.card.spellability.SpellAbility; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/replacement/ReplacementHandler.java b/src/main/java/forge/card/replacement/ReplacementHandler.java index 563f25a825f..5e63379bbcf 100644 --- a/src/main/java/forge/card/replacement/ReplacementHandler.java +++ b/src/main/java/forge/card/replacement/ReplacementHandler.java @@ -28,7 +28,7 @@ import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index 80784d24e7a..57d28ddc102 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -42,9 +42,8 @@ import forge.card.trigger.Trigger; import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.game.GlobalRuleChange; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; -import forge.game.player.ComputerAIGeneral; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.view.ButtonUtil; @@ -299,7 +298,7 @@ public class SpellPermanent extends Spell { } // save cards with flash for surprise blocking if (card.hasKeyword("Flash") - && !ComputerAIGeneral.hasETBTrigger(card) + && !card.hasETBTrigger() && (Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(ai) || Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY))) { return false; @@ -381,8 +380,8 @@ public class SpellPermanent extends Spell { } if (card.isCreature() && (card.getNetDefense() <= 0) && !card.hasStartOfKeyword("etbCounter") - && mana.countX() == 0 && !ComputerAIGeneral.hasETBTrigger(card) - && !ComputerAIGeneral.hasETBReplacement(card)) { + && mana.countX() == 0 && !card.hasETBTrigger() + && !card.hasETBReplacement()) { return false; } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index 9aaa6b2b32f..dba4bec2da4 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -36,9 +36,9 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; import forge.game.GameState; import forge.game.GlobalRuleChange; +import forge.game.ai.ComputerUtil; import forge.game.phase.PhaseType; //import forge.util.TextUtil; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/card/trigger/WrappedAbility.java b/src/main/java/forge/card/trigger/WrappedAbility.java index ad6788c7181..74fe2204e1e 100644 --- a/src/main/java/forge/card/trigger/WrappedAbility.java +++ b/src/main/java/forge/card/trigger/WrappedAbility.java @@ -20,7 +20,7 @@ import forge.card.spellability.SpellAbilityRestriction; import forge.card.spellability.Target; import forge.control.input.Input; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; // Wrapper ability that checks the requirements again just before diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java index 180168d5eae..a43dde3d47d 100644 --- a/src/main/java/forge/control/input/InputMulligan.java +++ b/src/main/java/forge/control/input/InputMulligan.java @@ -33,7 +33,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; import forge.game.GameState; import forge.game.GameType; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.Zone; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/game/player/ComputerAIGeneral.java b/src/main/java/forge/game/ai/AiController.java similarity index 54% rename from src/main/java/forge/game/player/ComputerAIGeneral.java rename to src/main/java/forge/game/ai/AiController.java index 3e0ec91b1cd..abf72ff9402 100644 --- a/src/main/java/forge/game/player/ComputerAIGeneral.java +++ b/src/main/java/forge/game/ai/AiController.java @@ -15,24 +15,18 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.game.player; +package forge.game.ai; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import com.esotericsoftware.minlog.Log; import forge.Card; import forge.card.abilityfactory.ApiType; -import forge.card.cardfactory.CardFactoryUtil; -import forge.card.replacement.ReplaceMoved; -import forge.card.replacement.ReplacementEffect; import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellPermanent; -import forge.card.trigger.Trigger; -import forge.card.trigger.TriggerType; import forge.game.GameState; +import forge.game.player.Player; import forge.game.zone.ZoneType; /** @@ -43,7 +37,7 @@ import forge.game.zone.ZoneType; * @author Forge * @version $Id$ */ -public class ComputerAIGeneral implements Computer { +public class AiController { private final Player player; private final GameState game; @@ -52,66 +46,11 @@ public class ComputerAIGeneral implements Computer { * Constructor for ComputerAI_General. *

*/ - public ComputerAIGeneral(final Player computerPlayer, final GameState game0) { + public AiController(final Player computerPlayer, final GameState game0) { player = computerPlayer; game = game0; } - /** - *

- * main. - *

- */ - @Override - public final void playLands() - { - List landsWannaPlay = ComputerUtil.getLandsToPlay(player); - - while(landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand()) { - Card land = ComputerUtil.chooseBestLandToPlay(landsWannaPlay, player); - landsWannaPlay.remove(land); - player.playLand(land); - } - } - - - /** - *

- * hasACardGivingHaste. - *

- * - * @return a boolean. - */ - public static boolean hasACardGivingHaste(final Player ai) { - final List all = new ArrayList(ai.getCardsIn(ZoneType.Battlefield)); - all.addAll(CardFactoryUtil.getExternalZoneActivationCards(ai)); - all.addAll(ai.getCardsIn(ZoneType.Hand)); - - for (final Card c : all) { - for (final SpellAbility sa : c.getSpellAbility()) { - - if (sa.getApi() == null) { - continue; - } - - /// ???? - // if ( sa.isAbility() || sa.isSpell() && sa.getApi() != ApiType.Pump ) continue - if (sa.hasParam("AB") && !sa.getParam("AB").equals("Pump")) { - continue; - } - if (sa.hasParam("SP") && !sa.getParam("SP").equals("Pump")) { - continue; - } - - if (sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) { - return true; - } - } - } - - return false; - } // hasACardGivingHaste - /** *

* getAvailableSpellAbilities. @@ -120,77 +59,21 @@ public class ComputerAIGeneral implements Computer { * @return a {@link forge.CardList} object. */ private List getAvailableCards() { - - final Player opp = player.getOpponent(); List all = new ArrayList(player.getCardsIn(ZoneType.Hand)); - all.addAll(player.getCardsIn(ZoneType.Battlefield)); - all.addAll(player.getCardsIn(ZoneType.Exile)); + //all.addAll(player.getCardsIn(ZoneType.Battlefield)); + //all.addAll(player.getCardsIn(ZoneType.Exile)); all.addAll(player.getCardsIn(ZoneType.Graveyard)); all.addAll(player.getCardsIn(ZoneType.Command)); if (!player.getCardsIn(ZoneType.Library).isEmpty()) { all.add(player.getCardsIn(ZoneType.Library).get(0)); } - all.addAll(opp.getCardsIn(ZoneType.Exile)); - all.addAll(opp.getCardsIn(ZoneType.Battlefield)); + for(Player p : game.getPlayers()) { + all.addAll(p.getCardsIn(ZoneType.Exile)); + all.addAll(p.getCardsIn(ZoneType.Battlefield)); + } return all; } - /** - *

- * hasETBTrigger. - *

- * - * @param card - * a {@link forge.Card} object. - * @return a boolean. - */ - public static boolean hasETBTrigger(final Card card) { - for (final Trigger tr : card.getTriggers()) { - final HashMap params = tr.getMapParams(); - if (tr.getMode() != TriggerType.ChangesZone) { - continue; - } - - if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) { - continue; - } - - if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) { - continue; - } - return true; - } - return false; - } - - /** - *

- * hasETBTrigger. - *

- * - * @param card - * a {@link forge.Card} object. - * @return a boolean. - */ - public static boolean hasETBReplacement(final Card card) { - for (final ReplacementEffect re : card.getReplacementEffects()) { - final HashMap params = re.getMapParams(); - if (!(re instanceof ReplaceMoved)) { - continue; - } - - if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) { - continue; - } - - if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) { - continue; - } - return true; - } - return false; - } - /** *

* getPossibleETBCounters. @@ -271,40 +154,13 @@ public class ComputerAIGeneral implements Computer { * declare_attackers. *

*/ - @Override - public final void declareAttackers() { - // 12/2/10(sol) the decision making here has moved to getAttackers() - game.setCombat(ComputerUtil.getAttackers(player)); - - final List att = game.getCombat().getAttackers(); - if (!att.isEmpty()) { - game.getPhaseHandler().setCombat(true); - } - - for (final Card element : att) { - // tapping of attackers happens after Propaganda is paid for - final StringBuilder sb = new StringBuilder(); - sb.append("Computer just assigned ").append(element.getName()).append(" as an attacker."); - Log.debug(sb.toString()); - } - - player.getZone(ZoneType.Battlefield).updateObservers(); - - game.getPhaseHandler().setPlayersPriorityPermission(false); - - // ai is about to attack, cancel all phase skipping - for (Player p : game.getPlayers()) { - p.getController().autoPassCancel(); - } - } - /** *

* stack_not_empty. *

*/ - @Override + public final List getSpellAbilitiesToPlay() { // if top of stack is owned by me if (!game.getStack().isEmpty() && game.getStack().peekInstance().getActivatingPlayer().equals(player)) { @@ -326,7 +182,11 @@ public class ComputerAIGeneral implements Computer { return ComputerUtil.playSpellAbilities(player, getSpellAbilities(cards), game); } - @Override + public GameState getGame() + { + return game; + } + public Player getPlayer() { return player; diff --git a/src/main/java/forge/game/player/ComputerAiInputBlock.java b/src/main/java/forge/game/ai/AiInputBlock.java similarity index 82% rename from src/main/java/forge/game/player/ComputerAiInputBlock.java rename to src/main/java/forge/game/ai/AiInputBlock.java index 604d59c4199..bf3bc2abb70 100644 --- a/src/main/java/forge/game/player/ComputerAiInputBlock.java +++ b/src/main/java/forge/game/ai/AiInputBlock.java @@ -1,4 +1,4 @@ -package forge.game.player; +package forge.game.ai; import java.util.List; @@ -6,12 +6,13 @@ import forge.Card; import forge.control.input.Input; import forge.game.GameState; import forge.game.phase.CombatUtil; +import forge.game.player.Player; /** * TODO: Write javadoc for this type. * */ -public class ComputerAiInputBlock extends Input { +public class AiInputBlock extends Input { private final GameState game; /** @@ -19,7 +20,7 @@ public class ComputerAiInputBlock extends Input { * @param game * @param player */ - public ComputerAiInputBlock(GameState game, Player player) { + public AiInputBlock(GameState game, Player player) { super(); this.game = game; this.player = player; diff --git a/src/main/java/forge/game/player/ComputerAIInput.java b/src/main/java/forge/game/ai/AiInputCommon.java similarity index 58% rename from src/main/java/forge/game/player/ComputerAIInput.java rename to src/main/java/forge/game/ai/AiInputCommon.java index 3d9e4200e75..4c9ddd1d0b7 100644 --- a/src/main/java/forge/game/player/ComputerAIInput.java +++ b/src/main/java/forge/game/ai/AiInputCommon.java @@ -15,17 +15,19 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.game.player; +package forge.game.ai; import java.util.List; import com.esotericsoftware.minlog.Log; -import forge.Singletons; +import forge.Card; import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.GameState; import forge.game.phase.PhaseType; +import forge.game.player.Player; +import forge.game.zone.ZoneType; /** *

@@ -35,11 +37,13 @@ import forge.game.phase.PhaseType; * @author Forge * @version $Id$ */ -public class ComputerAIInput extends Input { +public class AiInputCommon extends Input { /** Constant serialVersionUID=-3091338639571662216L. */ private static final long serialVersionUID = -3091338639571662216L; - private final Computer computer; + private final AiController computer; + private final Player player; + private final GameState game; /** *

@@ -49,15 +53,17 @@ public class ComputerAIInput extends Input { * @param iComputer * a {@link forge.game.player.Computer} object. */ - public ComputerAIInput(final Computer iComputer) { + public AiInputCommon(final AiController iComputer) { this.computer = iComputer; + player = computer.getPlayer(); + this.game = computer.getGame(); } /** {@inheritDoc} */ @Override public final void showMessage() { // should not think when the game is over - if (Singletons.getModel().getGame().isGameOver()) { + if (game.isGameOver()) { return; } @@ -68,7 +74,7 @@ public class ComputerAIInput extends Input { * send the \"Stack Report\" and the * \"Detailed Error Trace\" to the Forge forum."); */ - GameState game = Singletons.getModel().getGame(); + final PhaseType phase = game.getPhaseHandler().getPhase(); if (game.getStack().size() > 0) { @@ -76,14 +82,13 @@ public class ComputerAIInput extends Input { } else { switch(phase) { case COMBAT_DECLARE_ATTACKERS: - this.computer.declareAttackers(); - + declareAttackers(); break; case MAIN1: case MAIN2: Log.debug("Computer " + phase.toString()); - this.computer.playLands(); + playLands(); // fall through is intended default: playSpellAbilities(game); @@ -93,29 +98,61 @@ public class ComputerAIInput extends Input { game.getPhaseHandler().passPriority(); } // getMessage(); + /** + * TODO: Write javadoc for this method. + */ + private void declareAttackers() { + // 12/2/10(sol) the decision making here has moved to getAttackers() + game.setCombat(ComputerUtil.getAttackers(player)); + + final List att = game.getCombat().getAttackers(); + if (!att.isEmpty()) { + game.getPhaseHandler().setCombat(true); + } + + for (final Card element : att) { + // tapping of attackers happens after Propaganda is paid for + final StringBuilder sb = new StringBuilder(); + sb.append("Computer just assigned ").append(element.getName()).append(" as an attacker."); + Log.debug(sb.toString()); + } + + player.getZone(ZoneType.Battlefield).updateObservers(); + + game.getPhaseHandler().setPlayersPriorityPermission(false); + + // ai is about to attack, cancel all phase skipping + for (Player p : game.getPlayers()) { + p.getController().autoPassCancel(); + } + } + + /** + * TODO: Write javadoc for this method. + */ + private void playLands() { + final Player player = computer.getPlayer(); + List landsWannaPlay = ComputerUtil.getLandsToPlay(player); + + while(landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand()) { + Card land = ComputerUtil.chooseBestLandToPlay(landsWannaPlay, player); + landsWannaPlay.remove(land); + player.playLand(land); + } + } + protected void playSpellAbilities(final GameState game) { - Player ai = computer.getPlayer(); List toPlay = computer.getSpellAbilitiesToPlay(); if ( toPlay != null ) { for(SpellAbility sa : toPlay) { //System.out.print(sa); - if (ComputerUtil.canBePlayedAndPayedByAI(ai, sa)) - ComputerUtil.handlePlayingSpellAbility(ai, sa, game); + if (ComputerUtil.canBePlayedAndPayedByAI(player, sa)) + ComputerUtil.handlePlayingSpellAbility(player, sa, game); } } } - /** - *

- * Getter for the field computer. - *

- * - * @return a {@link forge.game.player.Computer} object. - */ - public final Computer getComputer() { - return this.computer; - } /* (non-Javadoc) * @see forge.control.input.Input#isClassUpdated() diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/ai/ComputerUtil.java similarity index 98% rename from src/main/java/forge/game/player/ComputerUtil.java rename to src/main/java/forge/game/ai/ComputerUtil.java index f87f62f50bb..9ea89c57756 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/ai/ComputerUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.game.player; +package forge.game.ai; import java.util.ArrayList; import java.util.Collections; @@ -64,6 +64,7 @@ import forge.game.phase.Combat; import forge.game.phase.CombatUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; +import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; import forge.util.Aggregates; @@ -2089,7 +2090,7 @@ public class ComputerUtil { if (card.getSVar("PlayMain1").equals("TRUE")) { return true; } - if ((card.isCreature() && (ComputerAIGeneral.hasACardGivingHaste(ai) + if ((card.isCreature() && (ComputerUtil.hasACardGivingHaste(ai) || card.hasKeyword("Haste"))) || card.hasKeyword("Exalted")) { return true; } @@ -2265,4 +2266,41 @@ public class ComputerUtil { return r.nextFloat() <= Math.pow(.95, activations); } + + /** + *

+ * hasACardGivingHaste. + *

+ * + * @return a boolean. + */ + public static boolean hasACardGivingHaste(final Player ai) { + final List all = new ArrayList(ai.getCardsIn(ZoneType.Battlefield)); + all.addAll(CardFactoryUtil.getExternalZoneActivationCards(ai)); + all.addAll(ai.getCardsIn(ZoneType.Hand)); + + for (final Card c : all) { + for (final SpellAbility sa : c.getSpellAbility()) { + + if (sa.getApi() == null) { + continue; + } + + /// ???? + // if ( sa.isAbility() || sa.isSpell() && sa.getApi() != ApiType.Pump ) continue + if (sa.hasParam("AB") && !sa.getParam("AB").equals("Pump")) { + continue; + } + if (sa.hasParam("SP") && !sa.getParam("SP").equals("Pump")) { + continue; + } + + if (sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) { + return true; + } + } + } + + return false; + } // hasACardGivingHaste } diff --git a/src/main/java/forge/game/player/ComputerUtilAttack.java b/src/main/java/forge/game/ai/ComputerUtilAttack.java similarity index 99% rename from src/main/java/forge/game/player/ComputerUtilAttack.java rename to src/main/java/forge/game/ai/ComputerUtilAttack.java index f858649c04e..f8052e822ce 100644 --- a/src/main/java/forge/game/player/ComputerUtilAttack.java +++ b/src/main/java/forge/game/ai/ComputerUtilAttack.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.game.player; +package forge.game.ai; import java.util.ArrayList; import java.util.List; @@ -35,6 +35,7 @@ import forge.card.trigger.TriggerType; import forge.game.GameState; import forge.game.phase.Combat; import forge.game.phase.CombatUtil; +import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.MyRandom; diff --git a/src/main/java/forge/game/player/ComputerUtilBlock.java b/src/main/java/forge/game/ai/ComputerUtilBlock.java similarity index 99% rename from src/main/java/forge/game/player/ComputerUtilBlock.java rename to src/main/java/forge/game/ai/ComputerUtilBlock.java index 6b8c91acc3c..5c1798d78ab 100644 --- a/src/main/java/forge/game/player/ComputerUtilBlock.java +++ b/src/main/java/forge/game/ai/ComputerUtilBlock.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.game.player; +package forge.game.ai; import java.util.ArrayList; import java.util.List; @@ -32,6 +32,7 @@ import forge.GameEntity; import forge.card.cardfactory.CardFactoryUtil; import forge.game.phase.Combat; import forge.game.phase.CombatUtil; +import forge.game.player.Player; /** diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index 5623b5345fe..98d9af1c631 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -57,8 +57,8 @@ import forge.card.trigger.TriggerHandler; import forge.card.trigger.TriggerType; import forge.game.GameState; import forge.game.GlobalRuleChange; -import forge.game.player.ComputerUtil; -import forge.game.player.ComputerUtilBlock; +import forge.game.ai.ComputerUtil; +import forge.game.ai.ComputerUtilBlock; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index 4d072489b4c..dba51758569 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -45,7 +45,7 @@ import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.control.input.InputSelectManyCards; import forge.game.GameState; -import forge.game.player.ComputerUtil; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.Zone; diff --git a/src/main/java/forge/game/player/AIPlayer.java b/src/main/java/forge/game/player/AIPlayer.java index 316e8c9be81..610bdb103bd 100644 --- a/src/main/java/forge/game/player/AIPlayer.java +++ b/src/main/java/forge/game/player/AIPlayer.java @@ -28,6 +28,10 @@ import forge.CardPredicates; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; import forge.game.GameState; +import forge.game.ai.AiController; +import forge.game.ai.AiInputBlock; +import forge.game.ai.AiInputCommon; +import forge.game.ai.ComputerUtil; import forge.game.zone.ZoneType; import forge.util.Aggregates; import forge.util.MyRandom; @@ -42,6 +46,7 @@ import forge.util.MyRandom; */ public class AIPlayer extends Player { + private final AiController brains; /** *

* Constructor for AIPlayer. @@ -53,8 +58,9 @@ public class AIPlayer extends Player { */ public AIPlayer(final LobbyPlayer player, final GameState game) { super(player, game, new PlayerController()); - getController().setDefaultInput(new ComputerAIInput(new ComputerAIGeneral(this, game))); - getController().setBlockInput(new ComputerAiInputBlock(game, this)); + brains = new AiController(this, game); + getController().setDefaultInput(new AiInputCommon(brains)); + getController().setBlockInput(new AiInputBlock(game, this)); } diff --git a/src/main/java/forge/game/player/Computer.java b/src/main/java/forge/game/player/Computer.java deleted file mode 100644 index 2a8a7371011..00000000000 --- a/src/main/java/forge/game/player/Computer.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package forge.game.player; - -import java.util.List; - -import forge.card.spellability.SpellAbility; - -/** - *

- * Computer interface. - *

- * - * @author Forge - * @version $Id$ - */ -public interface Computer { - - /** - *

- * declare_attackers. - *

- */ - void declareAttackers(); - - - /** - *

- * stack_not_empty. - *

- */ - List getSpellAbilitiesToPlay(); - - /** - * TODO: Write javadoc for this method. - */ - void playLands(); - - public Player getPlayer(); - -} diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index 0aeff14037c..f6acd323288 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -52,9 +52,9 @@ import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.control.input.InputPayManaCostAbility; import forge.game.GameState; +import forge.game.ai.ComputerUtil; import forge.game.event.SpellResolvedEvent; import forge.game.phase.PhaseType; -import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.gui.GuiChoose; import forge.gui.framework.EDocID;