From b501c76f7c6aaa31d1192736a9a97f87b8c5164e Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Thu, 19 Dec 2013 23:03:28 +0000 Subject: [PATCH] some more gui calls gone --- .../main/java/forge/ai/SpellAbilityAi.java | 2 +- .../main/java/forge/ai/ability/AttachAi.java | 2 +- .../main/java/forge/ai/ability/BondAi.java | 2 +- .../java/forge/ai/ability/ChangeZoneAi.java | 2 +- .../java/forge/ai/ability/ChooseCardAi.java | 2 +- .../java/forge/ai/ability/ChooseSourceAi.java | 2 +- .../forge/ai/ability/CopyPermanentAi.java | 2 +- .../src/main/java/forge/ai/ability/DigAi.java | 11 ++++++ .../main/java/forge/ai/ability/EncodeAi.java | 2 +- .../forge/ai/ability/LegendaryRuleAi.java | 2 +- .../main/java/forge/ai/ability/PlayAi.java | 2 +- .../forge/game/ability/effects/DigEffect.java | 39 +++++++------------ .../forge/game/player/PlayerController.java | 5 ++- .../forge/game/player/PlayerControllerAi.java | 4 +- .../game/player/PlayerControllerHuman.java | 2 +- .../util/PlayerControllerForTests.java | 2 +- 16 files changed, 42 insertions(+), 41 deletions(-) diff --git a/forge-gui/src/main/java/forge/ai/SpellAbilityAi.java b/forge-gui/src/main/java/forge/ai/SpellAbilityAi.java index fb6095f2547..482a07307df 100644 --- a/forge-gui/src/main/java/forge/ai/SpellAbilityAi.java +++ b/forge-gui/src/main/java/forge/ai/SpellAbilityAi.java @@ -144,7 +144,7 @@ public abstract class SpellAbilityAi extends SaTargetRoutines { return true; } - public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { System.err.println("Warning: default (ie. inherited from base class) implementation of chooseSingleCard is used for " + this.getClass().getName() + ". Consider declaring an overloaded method"); return Iterables.getFirst(options, null); } diff --git a/forge-gui/src/main/java/forge/ai/ability/AttachAi.java b/forge-gui/src/main/java/forge/ai/ability/AttachAi.java index 30d88163ee5..28f1a204d65 100644 --- a/forge-gui/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/AttachAi.java @@ -1234,7 +1234,7 @@ public class AttachAi extends SpellAbilityAi { } @Override - public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { return attachToCardAIPreferences(ai, sa, true); } diff --git a/forge-gui/src/main/java/forge/ai/ability/BondAi.java b/forge-gui/src/main/java/forge/ai/ability/BondAi.java index f5359690e3e..b9c07bf0f44 100644 --- a/forge-gui/src/main/java/forge/ai/ability/BondAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/BondAi.java @@ -52,7 +52,7 @@ public final class BondAi extends SpellAbilityAi { @Override - public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { return ComputerUtilCard.getBestCreatureAI(options); } } diff --git a/forge-gui/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-gui/src/main/java/forge/ai/ability/ChangeZoneAi.java index 5957b1f6d37..4740e9173e2 100644 --- a/forge-gui/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -1430,7 +1430,7 @@ public class ChangeZoneAi extends SpellAbilityAi { @Override - public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { // Called when looking for creature to attach aura or equipment return ComputerUtilCard.getBestAI(options); } diff --git a/forge-gui/src/main/java/forge/ai/ability/ChooseCardAi.java b/forge-gui/src/main/java/forge/ai/ability/ChooseCardAi.java index d915fbee1a4..c2f70b8a815 100644 --- a/forge-gui/src/main/java/forge/ai/ability/ChooseCardAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/ChooseCardAi.java @@ -100,7 +100,7 @@ public class ChooseCardAi extends SpellAbilityAi { * @see forge.card.ability.SpellAbilityAi#chooseSingleCard(forge.card.spellability.SpellAbility, java.util.List, boolean) */ @Override - public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { final Card host = sa.getSourceCard(); final String logic = sa.getParam("AILogic"); Card choice = null; diff --git a/forge-gui/src/main/java/forge/ai/ability/ChooseSourceAi.java b/forge-gui/src/main/java/forge/ai/ability/ChooseSourceAi.java index 7c8ae574e5a..61e398e81ca 100644 --- a/forge-gui/src/main/java/forge/ai/ability/ChooseSourceAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/ChooseSourceAi.java @@ -126,7 +126,7 @@ public class ChooseSourceAi extends SpellAbilityAi { @Override - public Card chooseSingleCard(final Player aiChoser, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(final Player aiChoser, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { if ("NeedsPrevention".equals(sa.getParam("AILogic"))) { final Player ai = sa.getActivatingPlayer(); final Game game = ai.getGame(); diff --git a/forge-gui/src/main/java/forge/ai/ability/CopyPermanentAi.java b/forge-gui/src/main/java/forge/ai/ability/CopyPermanentAi.java index 68a053c40e4..6c62aa56371 100644 --- a/forge-gui/src/main/java/forge/ai/ability/CopyPermanentAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/CopyPermanentAi.java @@ -127,7 +127,7 @@ public class CopyPermanentAi extends SpellAbilityAi { * @see forge.card.ability.SpellAbilityAi#chooseSingleCard(forge.game.player.Player, forge.card.spellability.SpellAbility, java.util.List, boolean) */ @Override - public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { // Select a card to attach to return ComputerUtilCard.getBestAI(options); } diff --git a/forge-gui/src/main/java/forge/ai/ability/DigAi.java b/forge-gui/src/main/java/forge/ai/ability/DigAi.java index 62eb600202c..3de3f63ddcc 100644 --- a/forge-gui/src/main/java/forge/ai/ability/DigAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/DigAi.java @@ -1,8 +1,10 @@ package forge.ai.ability; +import java.util.Collection; import java.util.Random; import forge.ai.ComputerUtil; +import forge.ai.ComputerUtilCard; import forge.ai.SpellAbilityAi; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -78,6 +80,15 @@ public class DigAi extends SpellAbilityAi { return true; } + + @Override + public Card chooseSingleCard(Player ai, SpellAbility sa, Collection valid, boolean isOptional, Player relatedPlayer) { + Card chosen = ComputerUtilCard.getBestAI(valid); + if (sa.getActivatingPlayer().isOpponentOf(ai) && relatedPlayer.isOpponentOf(ai)) { + return ComputerUtilCard.getWorstAI(valid); + } + return chosen; + } /* (non-Javadoc) * @see forge.card.ability.SpellAbilityAi#confirmAction(forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String) diff --git a/forge-gui/src/main/java/forge/ai/ability/EncodeAi.java b/forge-gui/src/main/java/forge/ai/ability/EncodeAi.java index 050f369b8fd..7abb7379556 100644 --- a/forge-gui/src/main/java/forge/ai/ability/EncodeAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/EncodeAi.java @@ -72,7 +72,7 @@ public final class EncodeAi extends SpellAbilityAi { * @see forge.card.ability.SpellAbilityAi#chooseSingleCard(forge.game.player.Player, forge.card.spellability.SpellAbility, java.util.List, boolean) */ @Override - public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { Card choice = null; // final String logic = sa.getParam("AILogic"); // if (logic == null) { diff --git a/forge-gui/src/main/java/forge/ai/ability/LegendaryRuleAi.java b/forge-gui/src/main/java/forge/ai/ability/LegendaryRuleAi.java index c9d5cc9c9c1..c8f04cb5805 100644 --- a/forge-gui/src/main/java/forge/ai/ability/LegendaryRuleAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/LegendaryRuleAi.java @@ -25,7 +25,7 @@ public class LegendaryRuleAi extends SpellAbilityAi { @Override - public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { // Choose a single legendary/planeswalker card to keep Card firstOption = Iterables.getFirst(options, null); boolean choosingFromPlanewalkers = firstOption.isPlaneswalker(); diff --git a/forge-gui/src/main/java/forge/ai/ability/PlayAi.java b/forge-gui/src/main/java/forge/ai/ability/PlayAi.java index 04a18d36b6c..19a910c5ed4 100644 --- a/forge-gui/src/main/java/forge/ai/ability/PlayAi.java +++ b/forge-gui/src/main/java/forge/ai/ability/PlayAi.java @@ -113,7 +113,7 @@ public class PlayAi extends SpellAbilityAi { * @see forge.card.ability.SpellAbilityAi#chooseSingleCard(forge.game.player.Player, forge.card.spellability.SpellAbility, java.util.List, boolean) */ @Override - public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection options, boolean isOptional) { + public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection options, boolean isOptional, Player targetedPlayer) { List tgtCards = CardLists.filter(options, new Predicate() { @Override public boolean apply(final Card c) { diff --git a/forge-gui/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-gui/src/main/java/forge/game/ability/effects/DigEffect.java index ea24d167235..053f77223a6 100644 --- a/forge-gui/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-gui/src/main/java/forge/game/ability/effects/DigEffect.java @@ -18,7 +18,6 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; -import forge.gui.GuiChoose; import forge.util.Lang; import forge.util.MyRandom; @@ -124,7 +123,7 @@ public class DigEffect extends SpellAbilityEffect { hasRevealed = p.getController().confirmAction(sa, null, question); if ( hasRevealed ) - p.getGame().getAction().reveal(top, p); + game.getAction().reveal(top, p); } else if (sa.hasParam("RevealValid")) { final String revealValid = sa.getParam("RevealValid"); @@ -187,17 +186,7 @@ public class DigEffect extends SpellAbilityEffect { prompt = "Leave which card on top of the "; } - Card chosen = null; - if (choser.isHuman()) { - - - chosen = GuiChoose.one(prompt + destZone2, valid); - } else { // Computer - chosen = ComputerUtilCard.getBestAI(valid); - if (sa.getActivatingPlayer().isOpponentOf(choser) && p.isOpponentOf(choser)) { - chosen = ComputerUtilCard.getWorstAI(valid); - } - } + Card chosen = choser.getController().chooseSingleCardForEffect(valid, sa, prompt + destZone2, false, p); movedCards.remove(chosen); if (sa.hasParam("RandomOrder")) { final Random random = MyRandom.getRandom(); @@ -205,6 +194,14 @@ public class DigEffect extends SpellAbilityEffect { } } else { int j = 0; + String prompt = "Choose a card to put into the "; + if (destZone1.equals(ZoneType.Library) && libraryPosition == -1) { + prompt = "Chose a card to put on the bottom of the "; + } + if (destZone1.equals(ZoneType.Library) && libraryPosition == 0) { + prompt = "Chose a card to put on top of the "; + } + if (choser.isHuman()) { while ((j < destZone1ChangeNum) || (anyNumber && (j < numToDig))) { // let user get choice @@ -212,13 +209,7 @@ public class DigEffect extends SpellAbilityEffect { break; } Card chosen = null; - String prompt = "Choose a card to put into the "; - if (destZone1.equals(ZoneType.Library) && (libraryPosition == -1)) { - prompt = "Chose a card to put on the bottom of the "; - } - if (destZone1.equals(ZoneType.Library) && (libraryPosition == 0)) { - prompt = "Chose a card to put on top of the "; - } + chosen = choser.getController().chooseSingleCardForEffect(valid, sa, prompt, anyNumber || optional); if ((chosen == null) || chosen.getName().equals("[No valid cards]")) { @@ -234,8 +225,6 @@ public class DigEffect extends SpellAbilityEffect { valid.removeAll(andOrCards); } } - // Singletons.getModel().getGameAction().revealToComputer() - // - for when this exists j++; } } // human @@ -252,9 +241,6 @@ public class DigEffect extends SpellAbilityEffect { if (chosen == null) { break; } - if (changeValid.length() > 0) { - GuiChoose.show("Computer picked: ", chosen); - } movedCards.add(chosen); valid.remove(chosen); if (!andOrValid.equals("")) { @@ -267,6 +253,9 @@ public class DigEffect extends SpellAbilityEffect { } } } + if (changeValid.length() > 0) { + game.getAction().reveal(choser + " picked:", movedCards, choser, true); + } } if (sa.hasParam("ForgetOtherRemembered")) { host.clearRemembered(); diff --git a/forge-gui/src/main/java/forge/game/player/PlayerController.java b/forge-gui/src/main/java/forge/game/player/PlayerController.java index a27133f7a56..2af52a36192 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerController.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerController.java @@ -132,8 +132,9 @@ public abstract class PlayerController { public abstract Pair chooseTarget(SpellAbility sa, List> allTargets); public abstract List chooseCardsForEffect(List sourceList, SpellAbility sa, String title, int amount, boolean isOptional); - public Card chooseSingleCardForEffect(Collection sourceList, SpellAbility sa, String title) { return chooseSingleCardForEffect(sourceList, sa, title, false); } - public abstract Card chooseSingleCardForEffect(Collection sourceList, SpellAbility sa, String title, boolean isOptional); + public final Card chooseSingleCardForEffect(Collection sourceList, SpellAbility sa, String title) { return chooseSingleCardForEffect(sourceList, sa, title, false, null); } + public final Card chooseSingleCardForEffect(Collection sourceList, SpellAbility sa, String title, boolean isOptional) { return chooseSingleCardForEffect(sourceList, sa, title, isOptional, null); } + public abstract Card chooseSingleCardForEffect(Collection sourceList, SpellAbility sa, String title, boolean isOptional, Player relatedPlayer); public abstract Player chooseSinglePlayerForEffect(List options, SpellAbility sa, String title); public abstract SpellAbility chooseSingleSpellForEffect(List spells, SpellAbility sa, String title); diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java index 285ae2216ff..5a43f6d2601 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java @@ -144,12 +144,12 @@ public class PlayerControllerAi extends PlayerController { } @Override - public Card chooseSingleCardForEffect(Collection options, SpellAbility sa, String title, boolean isOptional) { + public Card chooseSingleCardForEffect(Collection options, SpellAbility sa, String title, boolean isOptional, Player targetedPlayer) { ApiType api = sa.getApi(); if (null == api) { throw new InvalidParameterException("SA is not api-based, this is not supported yet"); } - return api.getAi().chooseSingleCard(player, sa, options, isOptional); + return api.getAi().chooseSingleCard(player, sa, options, isOptional, targetedPlayer); } @Override diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java index b8573a9b367..43fc4f6cda2 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java @@ -339,7 +339,7 @@ public class PlayerControllerHuman extends PlayerController { } @Override - public Card chooseSingleCardForEffect(Collection options, SpellAbility sa, String title, boolean isOptional) { + public Card chooseSingleCardForEffect(Collection options, SpellAbility sa, String title, boolean isOptional, Player targetedPlayer) { // Human is supposed to read the message and understand from it what to choose if (options.isEmpty()) { return null; diff --git a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index dc861bd6088..3249cc130a3 100644 --- a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -157,7 +157,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public Card chooseSingleCardForEffect(Collection sourceList, SpellAbility sa, String title, boolean isOptional) { + public Card chooseSingleCardForEffect(Collection sourceList, SpellAbility sa, String title, boolean isOptional, Player targetedPlayer) { return chooseItem(sourceList); }