mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +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.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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user