mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
- Update Miracle and Madness to use playSpellAbility so they go through costChange()
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user