tap-untap effect is indifferent to playertype

This commit is contained in:
Maxmtg
2013-12-06 06:46:24 +00:00
parent ed99ce1694
commit 495701c46c
8 changed files with 35 additions and 32 deletions

View File

@@ -9,6 +9,7 @@ import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card;
import forge.game.event.GameEventFlipCoin;
import forge.game.player.Player;
import forge.game.player.PlayerController;
import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType;
@@ -153,7 +154,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
public static boolean flipCoinCall(final Player caller, final SpellAbility sa, final int multiplier) {
boolean [] results = new boolean [multiplier];
for (int i = 0; i < multiplier; i++) {
final boolean choice = caller.getController().chooseBinary(sa, sa.getSourceCard().getName() + " - Call coin flip", true);
final boolean choice = caller.getController().chooseBinary(sa, sa.getSourceCard().getName() + " - Call coin flip", PlayerController.BinaryChoiceType.HeadsOrTails);
// Play the Flip A Coin sound
caller.getGame().fireEvent(new GameEventFlipCoin());
final boolean flip = MyRandom.getRandom().nextBoolean();

View File

@@ -10,9 +10,9 @@ import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card;
import forge.game.card.CardLists;
import forge.game.player.Player;
import forge.game.player.PlayerController;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
/**
* TODO: Write javadoc for this type.
@@ -20,10 +20,6 @@ import forge.gui.GuiChoose;
*/
public class TapOrUntapAllEffect extends SpellAbilityEffect {
private static enum TapOrUntap {
TAP, UNTAP
}
@Override
protected String getStackDescription(SpellAbility sa) {
// when getStackDesc is called, just build exactly what is happening
@@ -60,24 +56,22 @@ public class TapOrUntapAllEffect extends SpellAbilityEffect {
}
// Default to tapping for AI
TapOrUntap toTap = TapOrUntap.TAP;
if (sa.getActivatingPlayer().isHuman()) {
StringBuilder sb = new StringBuilder("Tap or Untap ");
if (sa.hasParam("ValidMessage")) {
sb.append(sa.getParam("ValidMessage"));
} else {
sb.append("Permanents");
}
sb.append("?");
boolean toTap = true;
final String[] tapOrUntap = new String[] { "Tap", "Untap" };
final Object z = GuiChoose.one(sb.toString(), tapOrUntap);
toTap = (z.equals("Tap")) ? TapOrUntap.TAP : TapOrUntap.UNTAP;
StringBuilder sb = new StringBuilder("Tap or Untap ");
if (sa.hasParam("ValidMessage")) {
sb.append(sa.getParam("ValidMessage"));
} else {
sb.append("Permanents");
}
sb.append("?");
toTap = sa.getActivatingPlayer().getController().chooseBinary(sa, sb.toString(), PlayerController.BinaryChoiceType.TapOrUntap);
for (final Card cad : validCards) {
if (cad.isInPlay()) {
if (toTap.equals(TapOrUntap.TAP)) {
if (toTap) {
cad.tap();
} else {
cad.untap();

View File

@@ -65,7 +65,6 @@ import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.input.InputSelectCards;
import forge.gui.input.InputSelectCardsFromList;
import forge.util.Aggregates;
@@ -353,7 +352,7 @@ public class CardFactoryUtil {
return;
}
final Card c1 = GuiChoose.oneOrNone("Select a card", sameCost);
final Card c1 = sourceCard.getController().getController().chooseSingleCardForEffect(sameCost, this, "Select a card", true);
if (c1 != null) {
// ability.setTargetCard((Card)o);

View File

@@ -28,7 +28,6 @@ import forge.game.card.CounterType;
import forge.game.mana.ManaCostBeingPaid;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.util.TextUtil;
/**
@@ -726,11 +725,7 @@ public class Cost {
return AbilityFactory.calculateAmount(card, "ChosenX", null);
}*/
final Integer[] choiceArray = new Integer[maxValue + 1];
for (int i = 0; i < choiceArray.length; i++) {
choiceArray[i] = i;
}
final Integer chosenX = GuiChoose.one(card.toString() + " - Choose a Value for X", choiceArray);
int chosenX = sa.getActivatingPlayer().getController().chooseNumber(sa, card.toString() + " - Choose a Value for X", 0, maxValue);
sa.setSVar("ChosenX", Integer.toString(chosenX));
card.setSVar("ChosenX", Integer.toString(chosenX));
return chosenX;

View File

@@ -48,6 +48,13 @@ public abstract class PlayerController {
CumulativeUpkeep;
}
public static enum BinaryChoiceType {
HeadsOrTails, // coin
TapOrUntap,
PlayOrDraw,
OddsOrEvens
}
protected final Game game;
private PhaseType autoPassUntil = null;
@@ -168,7 +175,7 @@ public abstract class PlayerController {
public abstract int chooseNumber(SpellAbility sa, String title, int min, int max);
public abstract boolean chooseBinary(SpellAbility sa, String question, boolean isCoin);
public abstract boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice);
public abstract boolean chooseFlipResult(SpellAbility sa, Player flipper, boolean[] results, boolean call);
public abstract Card chooseProtectionShield(GameEntity entityBeingDamaged, List<String> options, Map<String, Card> choiceMap);

View File

@@ -434,7 +434,8 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
public boolean chooseBinary(SpellAbility sa, String question, boolean isCoin) {
public boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice) {
if(kindOfChoice == BinaryChoiceType.TapOrUntap) return true;
return MyRandom.getRandom().nextBoolean();
}

View File

@@ -731,8 +731,14 @@ public class PlayerControllerHuman extends PlayerController {
* @see forge.game.player.PlayerController#chooseBinary(java.lang.String, boolean)
*/
@Override
public boolean chooseBinary(SpellAbility sa, String question, boolean isCoin) {
String[] labels = isCoin ? new String[]{"Heads", "Tails"} : new String[]{"Odds", "Evens"};
public boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice) {
String[] labels = new String[]{"Option1", "Option2"};
switch(kindOfChoice) {
case HeadsOrTails: labels = new String[]{"Heads", "Tails"}; break;
case TapOrUntap: labels = new String[]{"Tap", "Untap"}; break;
case OddsOrEvens: labels = new String[]{"Odds", "Evens"}; break;
case PlayOrDraw: labels = new String[]{"Play", "Draw"}; break;
}
return GuiDialog.confirm(sa.getSourceCard(), question, labels);
}

View File

@@ -391,7 +391,7 @@ public class PlayerControllerForTests extends PlayerController {
}
@Override
public boolean chooseBinary( SpellAbility sa, String question, boolean isCoin ) {
public boolean chooseBinary( SpellAbility sa, String question, BinaryChoiceType kindOfChoice ) {
return true;
}