mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
tap-untap effect is indifferent to playertype
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user