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.card.Card;
import forge.game.event.GameEventFlipCoin; import forge.game.event.GameEventFlipCoin;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerController;
import forge.game.spellability.AbilitySub; import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType; 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) { public static boolean flipCoinCall(final Player caller, final SpellAbility sa, final int multiplier) {
boolean [] results = new boolean [multiplier]; boolean [] results = new boolean [multiplier];
for (int i = 0; i < multiplier; i++) { 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 // Play the Flip A Coin sound
caller.getGame().fireEvent(new GameEventFlipCoin()); caller.getGame().fireEvent(new GameEventFlipCoin());
final boolean flip = MyRandom.getRandom().nextBoolean(); 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.Card;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerController;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
@@ -20,10 +20,6 @@ import forge.gui.GuiChoose;
*/ */
public class TapOrUntapAllEffect extends SpellAbilityEffect { public class TapOrUntapAllEffect extends SpellAbilityEffect {
private static enum TapOrUntap {
TAP, UNTAP
}
@Override @Override
protected String getStackDescription(SpellAbility sa) { protected String getStackDescription(SpellAbility sa) {
// when getStackDesc is called, just build exactly what is happening // when getStackDesc is called, just build exactly what is happening
@@ -60,8 +56,8 @@ public class TapOrUntapAllEffect extends SpellAbilityEffect {
} }
// Default to tapping for AI // Default to tapping for AI
TapOrUntap toTap = TapOrUntap.TAP; boolean toTap = true;
if (sa.getActivatingPlayer().isHuman()) {
StringBuilder sb = new StringBuilder("Tap or Untap "); StringBuilder sb = new StringBuilder("Tap or Untap ");
if (sa.hasParam("ValidMessage")) { if (sa.hasParam("ValidMessage")) {
sb.append(sa.getParam("ValidMessage")); sb.append(sa.getParam("ValidMessage"));
@@ -70,14 +66,12 @@ public class TapOrUntapAllEffect extends SpellAbilityEffect {
} }
sb.append("?"); sb.append("?");
final String[] tapOrUntap = new String[] { "Tap", "Untap" }; toTap = sa.getActivatingPlayer().getController().chooseBinary(sa, sb.toString(), PlayerController.BinaryChoiceType.TapOrUntap);
final Object z = GuiChoose.one(sb.toString(), tapOrUntap);
toTap = (z.equals("Tap")) ? TapOrUntap.TAP : TapOrUntap.UNTAP;
}
for (final Card cad : validCards) { for (final Card cad : validCards) {
if (cad.isInPlay()) { if (cad.isInPlay()) {
if (toTap.equals(TapOrUntap.TAP)) { if (toTap) {
cad.tap(); cad.tap();
} else { } else {
cad.untap(); cad.untap();

View File

@@ -65,7 +65,6 @@ import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler; import forge.game.trigger.TriggerHandler;
import forge.game.zone.Zone; import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.input.InputSelectCards; import forge.gui.input.InputSelectCards;
import forge.gui.input.InputSelectCardsFromList; import forge.gui.input.InputSelectCardsFromList;
import forge.util.Aggregates; import forge.util.Aggregates;
@@ -353,7 +352,7 @@ public class CardFactoryUtil {
return; 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) { if (c1 != null) {
// ability.setTargetCard((Card)o); // ability.setTargetCard((Card)o);

View File

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

View File

@@ -48,6 +48,13 @@ public abstract class PlayerController {
CumulativeUpkeep; CumulativeUpkeep;
} }
public static enum BinaryChoiceType {
HeadsOrTails, // coin
TapOrUntap,
PlayOrDraw,
OddsOrEvens
}
protected final Game game; protected final Game game;
private PhaseType autoPassUntil = null; 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 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 boolean chooseFlipResult(SpellAbility sa, Player flipper, boolean[] results, boolean call);
public abstract Card chooseProtectionShield(GameEntity entityBeingDamaged, List<String> options, Map<String, Card> choiceMap); 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 @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(); 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) * @see forge.game.player.PlayerController#chooseBinary(java.lang.String, boolean)
*/ */
@Override @Override
public boolean chooseBinary(SpellAbility sa, String question, boolean isCoin) { public boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice) {
String[] labels = isCoin ? new String[]{"Heads", "Tails"} : new String[]{"Odds", "Evens"}; 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); return GuiDialog.confirm(sa.getSourceCard(), question, labels);
} }

View File

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