some more gui calls gone

This commit is contained in:
Maxmtg
2013-12-19 23:03:28 +00:00
parent 97526110d0
commit b501c76f7c
16 changed files with 42 additions and 41 deletions

View File

@@ -144,7 +144,7 @@ public abstract class SpellAbilityAi extends SaTargetRoutines {
return true;
}
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional) {
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> 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);
}

View File

@@ -1234,7 +1234,7 @@ public class AttachAi extends SpellAbilityAi {
}
@Override
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional) {
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
return attachToCardAIPreferences(ai, sa, true);
}

View File

@@ -52,7 +52,7 @@ public final class BondAi extends SpellAbilityAi {
@Override
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional) {
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
return ComputerUtilCard.getBestCreatureAI(options);
}
}

View File

@@ -1430,7 +1430,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
@Override
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional) {
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
// Called when looking for creature to attach aura or equipment
return ComputerUtilCard.getBestAI(options);
}

View File

@@ -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<Card> options, boolean isOptional) {
public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
final Card host = sa.getSourceCard();
final String logic = sa.getParam("AILogic");
Card choice = null;

View File

@@ -126,7 +126,7 @@ public class ChooseSourceAi extends SpellAbilityAi {
@Override
public Card chooseSingleCard(final Player aiChoser, SpellAbility sa, Collection<Card> options, boolean isOptional) {
public Card chooseSingleCard(final Player aiChoser, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
if ("NeedsPrevention".equals(sa.getParam("AILogic"))) {
final Player ai = sa.getActivatingPlayer();
final Game game = ai.getGame();

View File

@@ -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<Card> options, boolean isOptional) {
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
// Select a card to attach to
return ComputerUtilCard.getBestAI(options);
}

View File

@@ -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<Card> 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)

View File

@@ -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<Card> options, boolean isOptional) {
public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
Card choice = null;
// final String logic = sa.getParam("AILogic");
// if (logic == null) {

View File

@@ -25,7 +25,7 @@ public class LegendaryRuleAi extends SpellAbilityAi {
@Override
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional) {
public Card chooseSingleCard(Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
// Choose a single legendary/planeswalker card to keep
Card firstOption = Iterables.getFirst(options, null);
boolean choosingFromPlanewalkers = firstOption.isPlaneswalker();

View File

@@ -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<Card> options, boolean isOptional) {
public Card chooseSingleCard(final Player ai, SpellAbility sa, Collection<Card> options, boolean isOptional, Player targetedPlayer) {
List<Card> tgtCards = CardLists.filter(options, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {

View File

@@ -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();

View File

@@ -132,8 +132,9 @@ public abstract class PlayerController {
public abstract Pair<SpellAbilityStackInstance, GameObject> chooseTarget(SpellAbility sa, List<Pair<SpellAbilityStackInstance, GameObject>> allTargets);
public abstract List<Card> chooseCardsForEffect(List<Card> sourceList, SpellAbility sa, String title, int amount, boolean isOptional);
public Card chooseSingleCardForEffect(Collection<Card> sourceList, SpellAbility sa, String title) { return chooseSingleCardForEffect(sourceList, sa, title, false); }
public abstract Card chooseSingleCardForEffect(Collection<Card> sourceList, SpellAbility sa, String title, boolean isOptional);
public final Card chooseSingleCardForEffect(Collection<Card> sourceList, SpellAbility sa, String title) { return chooseSingleCardForEffect(sourceList, sa, title, false, null); }
public final Card chooseSingleCardForEffect(Collection<Card> sourceList, SpellAbility sa, String title, boolean isOptional) { return chooseSingleCardForEffect(sourceList, sa, title, isOptional, null); }
public abstract Card chooseSingleCardForEffect(Collection<Card> sourceList, SpellAbility sa, String title, boolean isOptional, Player relatedPlayer);
public abstract Player chooseSinglePlayerForEffect(List<Player> options, SpellAbility sa, String title);
public abstract SpellAbility chooseSingleSpellForEffect(List<SpellAbility> spells, SpellAbility sa, String title);

View File

@@ -144,12 +144,12 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
public Card chooseSingleCardForEffect(Collection<Card> options, SpellAbility sa, String title, boolean isOptional) {
public Card chooseSingleCardForEffect(Collection<Card> 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

View File

@@ -339,7 +339,7 @@ public class PlayerControllerHuman extends PlayerController {
}
@Override
public Card chooseSingleCardForEffect(Collection<Card> options, SpellAbility sa, String title, boolean isOptional) {
public Card chooseSingleCardForEffect(Collection<Card> 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;

View File

@@ -157,7 +157,7 @@ public class PlayerControllerForTests extends PlayerController {
}
@Override
public Card chooseSingleCardForEffect(Collection<Card> sourceList, SpellAbility sa, String title, boolean isOptional) {
public Card chooseSingleCardForEffect(Collection<Card> sourceList, SpellAbility sa, String title, boolean isOptional, Player targetedPlayer) {
return chooseItem(sourceList);
}