- Update Miracle and Madness to use playSpellAbility so they go through costChange()

This commit is contained in:
Sol
2012-04-28 13:34:17 +00:00
parent 62ff56efaa
commit 9c310d361e
2 changed files with 46 additions and 49 deletions

View File

@@ -2657,6 +2657,22 @@ public class Card extends GameEntity implements Comparable<Card> {
return sas; return sas;
} }
/**
* <p>
* getFirstSpellAbility.
* </p>
*
* @return a SpellAbility object.
*/
public final SpellAbility getFirstSpellAbility() {
final ArrayList<SpellAbility> sas = this.getCharacteristics().getSpellAbility();
if (!sas.isEmpty()) {
return sas.get(0);
}
return null;
}
/** /**
* <p> * <p>
* clearSpellAbility. * clearSpellAbility.

View File

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