From f6ee68093746c83c16a369f695bf21eed7b01ce2 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 27 May 2013 18:22:25 +0000 Subject: [PATCH] InputPayMana now executes only updateMessage in EDT when it's not paid --- .../forge/control/input/InputPayManaBase.java | 19 ++++++++++++++- .../input/InputPayManaExecuteCommands.java | 17 ++++--------- .../input/InputPayManaOfCostPayment.java | 15 +++--------- .../control/input/InputPayManaSimple.java | 24 ++++++++++++++----- .../forge/control/input/InputPayManaX.java | 4 ++++ 5 files changed, 48 insertions(+), 31 deletions(-) diff --git a/src/main/java/forge/control/input/InputPayManaBase.java b/src/main/java/forge/control/input/InputPayManaBase.java index b1a714d8649..8512510188a 100644 --- a/src/main/java/forge/control/input/InputPayManaBase.java +++ b/src/main/java/forge/control/input/InputPayManaBase.java @@ -20,6 +20,7 @@ import forge.game.player.HumanPlay; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; +import forge.view.ButtonUtil; /** * TODO: Write javadoc for this type. @@ -188,7 +189,8 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I if( isAlredyPaid() ) { done(); stopNonEdt(); - } + } else + FThreads.invokeInEdtLater(new Runnable() { @Override public void run(){ updateMessage(); }}); } }; game.getInputQueue().invokeGameAction(proc); @@ -248,8 +250,23 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I return bPaid; } + + /** {@inheritDoc} */ + @Override + public void showMessage() { + if ( isFinished() ) return; + ButtonUtil.enableOnlyCancel(); + + if( isAlredyPaid() ) { + done(); + stop(); + } else + updateMessage(); + } + protected void onManaAbilityPaid() {} // some inputs overload it protected abstract void done(); + protected abstract void updateMessage(); @Override public String toString() { diff --git a/src/main/java/forge/control/input/InputPayManaExecuteCommands.java b/src/main/java/forge/control/input/InputPayManaExecuteCommands.java index 262969649f8..ca09eb9b58c 100644 --- a/src/main/java/forge/control/input/InputPayManaExecuteCommands.java +++ b/src/main/java/forge/control/input/InputPayManaExecuteCommands.java @@ -22,7 +22,6 @@ import forge.card.mana.ManaCost; import forge.card.mana.ManaCostBeingPaid; import forge.card.spellability.SpellAbility; import forge.game.player.Player; -import forge.view.ButtonUtil; //if cost is paid, Command.execute() is called @@ -109,12 +108,11 @@ public class InputPayManaExecuteCommands extends InputPayManaBase { this.stop(); } - /** {@inheritDoc} */ + /* (non-Javadoc) + * @see forge.control.input.InputPayManaBase#updateMessage() + */ @Override - public final void showMessage() { - if ( isFinished() ) return; - - ButtonUtil.enableOnlyCancel(); + protected void updateMessage() { final StringBuilder msg = new StringBuilder(this.message + "Pay Mana Cost: " + this.manaCost); if (this.phyLifeToLose > 0) { msg.append(" ("); @@ -125,11 +123,6 @@ public class InputPayManaExecuteCommands extends InputPayManaBase { if (this.manaCost.containsPhyrexianMana()) { msg.append("\n(Click on your life total to pay life for phyrexian mana.)"); } - - if( isAlredyPaid() ) { - done(); - stop(); - } else - showMessage(msg.toString()); + showMessage(msg.toString()); } } diff --git a/src/main/java/forge/control/input/InputPayManaOfCostPayment.java b/src/main/java/forge/control/input/InputPayManaOfCostPayment.java index ce96244bc53..e698e5ddfb2 100644 --- a/src/main/java/forge/control/input/InputPayManaOfCostPayment.java +++ b/src/main/java/forge/control/input/InputPayManaOfCostPayment.java @@ -4,7 +4,6 @@ import forge.Card; import forge.card.mana.ManaCostBeingPaid; import forge.card.spellability.SpellAbility; import forge.game.player.Player; -import forge.view.ButtonUtil; public class InputPayManaOfCostPayment extends InputPayManaBase { @@ -48,11 +47,7 @@ public class InputPayManaOfCostPayment extends InputPayManaBase { stop(); } - @Override - public void showMessage() { - if ( isFinished() ) return; // - - ButtonUtil.enableOnlyCancel(); + protected void updateMessage() { final String displayMana = manaCost.toString().replace("X", "").trim(); final StringBuilder msg = new StringBuilder("Pay Mana Cost: " + displayMana); @@ -65,11 +60,7 @@ public class InputPayManaOfCostPayment extends InputPayManaBase { if (manaCost.containsPhyrexianMana()) { msg.append("\n(Click on your life total to pay life for phyrexian mana.)"); } - - if( isAlredyPaid() ) { - done(); - stop(); - } else - showMessage(msg.toString()); + + showMessage(msg.toString()); } } diff --git a/src/main/java/forge/control/input/InputPayManaSimple.java b/src/main/java/forge/control/input/InputPayManaSimple.java index 1af9888a786..f27609803aa 100644 --- a/src/main/java/forge/control/input/InputPayManaSimple.java +++ b/src/main/java/forge/control/input/InputPayManaSimple.java @@ -77,6 +77,9 @@ public class InputPayManaSimple extends InputPayManaBase { */ @Override protected void done() { + + this.originalCard.setSunburstValue(this.manaCost.getSunburst()); + if (this.phyLifeToLose > 0) { player.payLife(this.phyLifeToLose, this.originalCard); } @@ -109,6 +112,20 @@ public class InputPayManaSimple extends InputPayManaBase { ButtonUtil.enableOnlyCancel(); + + if (this.manaCost.isPaid() && !new ManaCostBeingPaid(this.originalManaCost).isPaid()) { + this.done(); + this.stop(); + } else + updateMessage(); + + } + + /* (non-Javadoc) + * @see forge.control.input.InputPayManaBase#updateMessage() + */ + @Override + protected void updateMessage() { final StringBuilder msg = new StringBuilder("Pay Mana Cost: " + this.manaCost.toString()); if (this.phyLifeToLose > 0) { msg.append(" ("); @@ -122,11 +139,6 @@ public class InputPayManaSimple extends InputPayManaBase { // has its own variant of checkIfPaid showMessage(msg.toString()); - if (this.manaCost.isPaid() && !new ManaCostBeingPaid(this.originalManaCost).isPaid()) { - this.originalCard.setSunburstValue(this.manaCost.getSunburst()); - this.done(); - this.stop(); - } - + } } diff --git a/src/main/java/forge/control/input/InputPayManaX.java b/src/main/java/forge/control/input/InputPayManaX.java index 2af2eec693c..9c80d5cd295 100644 --- a/src/main/java/forge/control/input/InputPayManaX.java +++ b/src/main/java/forge/control/input/InputPayManaX.java @@ -65,7 +65,11 @@ public class InputPayManaX extends InputPayManaBase { } else { ButtonUtil.enableAllFocusOk(); } + updateMessage(); + } + @Override + protected void updateMessage() { StringBuilder msg = new StringBuilder("Pay X Mana Cost for "); msg.append(saPaidFor.getSourceCard().getName()).append("\n").append(this.xPaid); msg.append(" Paid so far.");