From 9c310d361e8d7e3b601eb2e5a8b1e9968c167427 Mon Sep 17 00:00:00 2001 From: Sol Date: Sat, 28 Apr 2012 13:34:17 +0000 Subject: [PATCH] - Update Miracle and Madness to use playSpellAbility so they go through costChange() --- src/main/java/forge/Card.java | 16 ++++++ src/main/java/forge/GameAction.java | 79 +++++++++++------------------ 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 07978f9a4b2..f33539a7699 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -2657,6 +2657,22 @@ public class Card extends GameEntity implements Comparable { return sas; } + /** + *

+ * getFirstSpellAbility. + *

+ * + * @return a SpellAbility object. + */ + public final SpellAbility getFirstSpellAbility() { + final ArrayList sas = this.getCharacteristics().getSpellAbility(); + if (!sas.isEmpty()) { + return sas.get(0); + } + + return null; + } + /** *

* clearSpellAbility. diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 9bd33025168..b46dcb68b26 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -714,50 +714,41 @@ public class GameAction { * drawMiracle. *

* - * @param c + * @param card * a {@link forge.Card} object. */ - public final void drawMiracle(final Card c) { + public final void drawMiracle(final Card card) { // Whenever a card with miracle is the first card drawn in a turn, // you may cast it for it's miracle cost - if (!c.hasMiracle()) { + if (!card.hasMiracle()) { return; } - final Card miracle = c; - final Ability cast = new Ability(miracle, miracle.getMiracleCost()) { - @Override - public void resolve() { - GameAction.this.playCardNoCost(miracle); - System.out.println("Miracle cost paid"); - } - }; + final SpellAbility miracle = card.getFirstSpellAbility().copy(); + miracle.setPayCosts(new Cost(card, card.getMiracleCost(), false)); final StringBuilder sb = new StringBuilder(); - sb.append(miracle.getName()).append(" - Cast via Miracle"); - cast.setStackDescription(sb.toString()); + sb.append(card.getName()).append(" - Cast via Miracle"); + miracle.setStackDescription(sb.toString()); - final Ability activate = new Ability(miracle, "0") { + // TODO Convert this to a Trigger + final Ability activate = new Ability(card, "0") { @Override public void resolve() { // pay miracle cost here. - if (miracle.getOwner().isHuman()) { - if (GameActionUtil.showYesNoDialog(miracle, miracle + " - Drawn. Pay Miracle Cost?")) { - if (cast.getManaCost().equals("0")) { - AllZone.getStack().add(cast); - } else { - AllZone.getInputControl().setInput(new InputPayManaCost(cast)); - } + if (card.getOwner().isHuman()) { + if (GameActionUtil.showYesNoDialog(card, card + " - Drawn. Pay Miracle Cost?")) { + Singletons.getModel().getGameAction().playSpellAbility(miracle); } } else { // computer will ALWAYS pay a miracle cost if he has the mana. - ComputerUtil.playStack(cast); + ComputerUtil.playStack(miracle); } } }; final StringBuilder sbAct = new StringBuilder(); - sbAct.append(miracle.getName()).append(" - Drawn. Pay Miracle Cost?"); + sbAct.append(card.getName()).append(" - Drawn. Pay Miracle Cost?"); activate.setStackDescription(sbAct.toString()); AllZone.getStack().add(activate); @@ -784,51 +775,41 @@ public class GameAction { * discardMadness. *

* - * @param c + * @param card * a {@link forge.Card} object. */ - public final void discardMadness(final Card c) { + public final void discardMadness(final Card card) { // Whenever a card with madness is discarded, you may cast it for it's // madness cost - if (!c.hasMadness()) { + if (!card.hasMadness()) { return; } - final Card madness = c; - final Ability cast = new Ability(madness, madness.getMadnessCost()) { - @Override - public void resolve() { - GameAction.this.playCardNoCost(madness); - System.out.println("Madness cost paid"); - } - }; + final SpellAbility madness = card.getFirstSpellAbility().copy(); + madness.setPayCosts(new Cost(card, card.getMadnessCost(), false)); final StringBuilder sb = new StringBuilder(); - sb.append(madness.getName()).append(" - Cast via Madness"); - cast.setStackDescription(sb.toString()); + sb.append(card.getName()).append(" - Cast via Madness"); + madness.setStackDescription(sb.toString()); - final Ability activate = new Ability(madness, "0") { + // TODO Convert this to a Trigger + final Ability activate = new Ability(card, "0") { @Override public void resolve() { - // pay madness cost here. - if (madness.getOwner().isHuman()) { - if (GameActionUtil.showYesNoDialog(madness, madness + " - Discarded. Pay Madness Cost?")) { - if (cast.getManaCost().equals("0")) { - AllZone.getStack().add(cast); - } else { - AllZone.getInputControl().setInput(new InputPayManaCost(cast)); - } + // pay miracle cost here. + if (card.getOwner().isHuman()) { + if (GameActionUtil.showYesNoDialog(card, card + " - Discarded. Pay Madness Cost?")) { + Singletons.getModel().getGameAction().playSpellAbility(madness); } } else { - // computer will ALWAYS pay a madness cost if he has the - // mana. - ComputerUtil.playStack(cast); + // computer will ALWAYS pay a miracle cost if he has the mana. + ComputerUtil.playStack(madness); } } }; final StringBuilder sbAct = new StringBuilder(); - sbAct.append(madness.getName()).append(" - Discarded. Pay Madness Cost?"); + sbAct.append(card.getName()).append(" - Drawn. Pay Madness Cost?"); activate.setStackDescription(sbAct.toString()); AllZone.getStack().add(activate);