diff --git a/.gitattributes b/.gitattributes index 2a39fcf7da1..ebdf4247ffa 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14153,6 +14153,7 @@ src/main/java/forge/control/input/InputBlock.java svneol=native#text/plain src/main/java/forge/control/input/InputCleanup.java svneol=native#text/plain src/main/java/forge/control/input/InputConfirmMulligan.java svneol=native#text/plain src/main/java/forge/control/input/InputLockUI.java -text +src/main/java/forge/control/input/InputNonSyncBase.java -text src/main/java/forge/control/input/InputPassPriority.java svneol=native#text/plain src/main/java/forge/control/input/InputPayManaBase.java -text src/main/java/forge/control/input/InputPayManaExecuteCommands.java svneol=native#text/plain diff --git a/src/main/java/forge/control/input/Input.java b/src/main/java/forge/control/input/Input.java index 93955c44503..de2ec64ec0b 100644 --- a/src/main/java/forge/control/input/Input.java +++ b/src/main/java/forge/control/input/Input.java @@ -10,7 +10,7 @@ import forge.game.player.Player; public interface Input { // showMessage() is always the first method called - void showMessage(); + void showMessage(InputQueue iq); void selectCard(Card c, boolean isMetaDown); diff --git a/src/main/java/forge/control/input/InputAttack.java b/src/main/java/forge/control/input/InputAttack.java index 090388873cd..ea35bc497c0 100644 --- a/src/main/java/forge/control/input/InputAttack.java +++ b/src/main/java/forge/control/input/InputAttack.java @@ -42,7 +42,7 @@ import forge.view.ButtonUtil; * @author Forge * @version $Id$ */ -public class InputAttack extends InputBase { +public class InputAttack extends InputNonSyncBase { /** Constant serialVersionUID=7849903731842214245L. */ private static final long serialVersionUID = 7849903731842214245L; diff --git a/src/main/java/forge/control/input/InputAutoPassPriority.java b/src/main/java/forge/control/input/InputAutoPassPriority.java index d3244abc907..477917750e9 100644 --- a/src/main/java/forge/control/input/InputAutoPassPriority.java +++ b/src/main/java/forge/control/input/InputAutoPassPriority.java @@ -6,7 +6,7 @@ import forge.game.player.Player; * TODO: Write javadoc for this type. * */ -public class InputAutoPassPriority extends InputBase { +public class InputAutoPassPriority extends InputNonSyncBase { private static final long serialVersionUID = -7520803307255234647L; public InputAutoPassPriority(Player player) { diff --git a/src/main/java/forge/control/input/InputBase.java b/src/main/java/forge/control/input/InputBase.java index 679adf8b08c..185b22cae59 100644 --- a/src/main/java/forge/control/input/InputBase.java +++ b/src/main/java/forge/control/input/InputBase.java @@ -18,7 +18,6 @@ package forge.control.input; import forge.Card; -import forge.FThreads; import forge.game.player.Player; import forge.gui.framework.SDisplayUtil; import forge.gui.match.CMatchUI; @@ -35,14 +34,16 @@ import forge.gui.match.views.VMessage; public abstract class InputBase implements java.io.Serializable, Input { /** Constant serialVersionUID=-6539552513871194081L. */ private static final long serialVersionUID = -6539552513871194081L; - protected final Player player; - public InputBase(Player player) { - this.player = player; - } + private InputQueue queue; // showMessage() is always the first method called @Override - public abstract void showMessage(); + public final void showMessage(InputQueue iq) { + queue = iq; + showMessage(); + } + + protected abstract void showMessage(); @Override public void selectCard(final Card c, boolean isMetaDown) { } @@ -61,23 +62,13 @@ public abstract class InputBase implements java.io.Serializable, Input { // Removes this input from the stack and releases any latches (in synchronous imports) protected final void stop() { // clears a "temp" Input like Input_PayManaCost if there is one - player.getGame().getInputQueue().removeInput(this); + queue.removeInput(this); afterStop(); // sync inputs will release their latch there } protected void afterStop() { } - protected void passPriority() { - final Runnable pass = new Runnable() { - @Override public void run() { - player.getController().passPriority(); - } - }; - if( FThreads.isEDT() ) - player.getGame().getInputQueue().LockAndInvokeGameAction(pass); - else - pass.run(); - } + protected final void flashIncorrectAction() { diff --git a/src/main/java/forge/control/input/InputBlock.java b/src/main/java/forge/control/input/InputBlock.java index 82584f3401a..57fd22d7baa 100644 --- a/src/main/java/forge/control/input/InputBlock.java +++ b/src/main/java/forge/control/input/InputBlock.java @@ -37,7 +37,7 @@ import forge.view.ButtonUtil; * @author Forge * @version $Id$ */ -public class InputBlock extends InputBase { +public class InputBlock extends InputNonSyncBase { /** Constant serialVersionUID=6120743598368928128L. */ private static final long serialVersionUID = 6120743598368928128L; diff --git a/src/main/java/forge/control/input/InputCleanup.java b/src/main/java/forge/control/input/InputCleanup.java index 765ca6b64bf..081b56d1733 100644 --- a/src/main/java/forge/control/input/InputCleanup.java +++ b/src/main/java/forge/control/input/InputCleanup.java @@ -31,7 +31,7 @@ import forge.view.ButtonUtil; * @author Forge * @version $Id$ */ -public class InputCleanup extends InputBase { +public class InputCleanup extends InputNonSyncBase { /** Constant serialVersionUID=-4164275418971547948L. */ private static final long serialVersionUID = -4164275418971547948L; private final GameState game; diff --git a/src/main/java/forge/control/input/InputConfirmMulligan.java b/src/main/java/forge/control/input/InputConfirmMulligan.java index 7b0feab91c0..7206246f541 100644 --- a/src/main/java/forge/control/input/InputConfirmMulligan.java +++ b/src/main/java/forge/control/input/InputConfirmMulligan.java @@ -39,13 +39,16 @@ public class InputConfirmMulligan extends InputSyncronizedBase { /** Constant serialVersionUID=-8112954303001155622L. */ private static final long serialVersionUID = -8112954303001155622L; + boolean keepHand = false; final boolean isCommander; - final List selected = new ArrayList(); - final private Player startingPlayer; + + private final List selected = new ArrayList(); + private final Player player; + private final Player startingPlayer; public InputConfirmMulligan(Player humanPlayer, Player startsGame, boolean commander) { - super(humanPlayer); + player = humanPlayer; isCommander = commander; startingPlayer = startsGame; } diff --git a/src/main/java/forge/control/input/InputLockUI.java b/src/main/java/forge/control/input/InputLockUI.java index a0cf414bd8f..50437ae4030 100644 --- a/src/main/java/forge/control/input/InputLockUI.java +++ b/src/main/java/forge/control/input/InputLockUI.java @@ -15,15 +15,12 @@ import forge.view.ButtonUtil; public class InputLockUI implements Input { private final AtomicInteger iCall = new AtomicInteger(); private final InputQueue iq; - /** - * TODO: Write javadoc for Constructor. - * @param inputQueue - */ + public InputLockUI(InputQueue inputQueue) { iq = inputQueue; } - public void showMessage() { + public void showMessage(InputQueue iq) { int ixCall = 1 + iCall.getAndIncrement(); FThreads.delay(500, new InputUpdater(ixCall)); } diff --git a/src/main/java/forge/control/input/InputNonSyncBase.java b/src/main/java/forge/control/input/InputNonSyncBase.java new file mode 100644 index 00000000000..edbc62cdaaa --- /dev/null +++ b/src/main/java/forge/control/input/InputNonSyncBase.java @@ -0,0 +1,25 @@ +package forge.control.input; + +import forge.FThreads; +import forge.game.player.Player; + +public abstract class InputNonSyncBase extends InputBase { + private static final long serialVersionUID = -4038934296796872326L; + protected final Player player; + + public InputNonSyncBase(Player p) { + this.player = p; + } + + protected void passPriority() { + final Runnable pass = new Runnable() { + @Override public void run() { + player.getController().passPriority(); + } + }; + if( FThreads.isEDT() ) + player.getGame().getInputQueue().LockAndInvokeGameAction(pass); + else + pass.run(); + } +} \ No newline at end of file diff --git a/src/main/java/forge/control/input/InputPassPriority.java b/src/main/java/forge/control/input/InputPassPriority.java index 574aee96a28..9459d6306c9 100644 --- a/src/main/java/forge/control/input/InputPassPriority.java +++ b/src/main/java/forge/control/input/InputPassPriority.java @@ -33,7 +33,7 @@ import forge.view.ButtonUtil; * @author Forge * @version $Id$ */ -public class InputPassPriority extends InputBase { +public class InputPassPriority extends InputNonSyncBase { /** Constant serialVersionUID=-581477682214137181L. */ private static final long serialVersionUID = -581477682214137181L; diff --git a/src/main/java/forge/control/input/InputPayManaBase.java b/src/main/java/forge/control/input/InputPayManaBase.java index 5edd4c28430..f4fc570df8d 100644 --- a/src/main/java/forge/control/input/InputPayManaBase.java +++ b/src/main/java/forge/control/input/InputPayManaBase.java @@ -16,6 +16,7 @@ import forge.card.spellability.AbilityManaPart; import forge.card.spellability.SpellAbility; import forge.game.GameState; import forge.game.player.HumanPlay; +import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; @@ -29,6 +30,7 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I protected int phyLifeToLose = 0; + protected final Player player; protected final GameState game; protected ManaCostBeingPaid manaCost; protected final SpellAbility saPaidFor; @@ -36,7 +38,7 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I boolean bPaid = false; protected InputPayManaBase(SpellAbility saToPayFor) { - super(saToPayFor.getActivatingPlayer()); + this.player = saToPayFor.getActivatingPlayer(); this.game = player.getGame(); this.saPaidFor = saToPayFor; } diff --git a/src/main/java/forge/control/input/InputSelectCards.java b/src/main/java/forge/control/input/InputSelectCards.java index 91ab0bb60f3..307761fb43f 100644 --- a/src/main/java/forge/control/input/InputSelectCards.java +++ b/src/main/java/forge/control/input/InputSelectCards.java @@ -6,7 +6,6 @@ public abstract class InputSelectCards extends InputSelectManyBase { private static final long serialVersionUID = -6609493252672573139L; protected InputSelectCards(int min, int max) { - super(min, max); } diff --git a/src/main/java/forge/control/input/InputSelectManyBase.java b/src/main/java/forge/control/input/InputSelectManyBase.java index d284ec6d011..1962520c722 100644 --- a/src/main/java/forge/control/input/InputSelectManyBase.java +++ b/src/main/java/forge/control/input/InputSelectManyBase.java @@ -5,7 +5,6 @@ import java.util.List; import forge.Card; import forge.GameEntity; -import forge.Singletons; import forge.view.ButtonUtil; public abstract class InputSelectManyBase extends InputSyncronizedBase implements InputSelectMany { @@ -24,7 +23,6 @@ public abstract class InputSelectManyBase extends InputSyn protected InputSelectManyBase(int min, int max) { - super(Singletons.getControl().getPlayer()); selected = new ArrayList(); if (min > max) { throw new IllegalArgumentException("Min must not be greater than Max"); diff --git a/src/main/java/forge/control/input/InputSelectTargets.java b/src/main/java/forge/control/input/InputSelectTargets.java index 3ac2ebae19e..a50d638dedb 100644 --- a/src/main/java/forge/control/input/InputSelectTargets.java +++ b/src/main/java/forge/control/input/InputSelectTargets.java @@ -43,7 +43,6 @@ public final class InputSelectTargets extends InputSyncronizedBase { * @param mandatory */ public InputSelectTargets(List choices, SpellAbility sa, boolean mandatory) { - super(sa.getActivatingPlayer()); this.choices = choices; this.tgt = sa.getTarget(); this.sa = sa; diff --git a/src/main/java/forge/control/input/InputSyncronizedBase.java b/src/main/java/forge/control/input/InputSyncronizedBase.java index a0900b496e6..4fd384c5bfa 100644 --- a/src/main/java/forge/control/input/InputSyncronizedBase.java +++ b/src/main/java/forge/control/input/InputSyncronizedBase.java @@ -5,16 +5,15 @@ import java.util.concurrent.CountDownLatch; import forge.Card; import forge.FThreads; import forge.error.BugReporter; -import forge.game.player.Player; public abstract class InputSyncronizedBase extends InputBase implements InputSynchronized { private static final long serialVersionUID = 8756177361251703052L; private boolean finished = false; private final CountDownLatch cdlDone; + - public InputSyncronizedBase(Player player) { - super(player); + public InputSyncronizedBase() { cdlDone = new CountDownLatch(1); } diff --git a/src/main/java/forge/game/ai/AiInputBlock.java b/src/main/java/forge/game/ai/AiInputBlock.java index a7afabfca75..9f83f703efa 100644 --- a/src/main/java/forge/game/ai/AiInputBlock.java +++ b/src/main/java/forge/game/ai/AiInputBlock.java @@ -3,7 +3,7 @@ package forge.game.ai; import java.util.List; import forge.Card; -import forge.control.input.InputBase; +import forge.control.input.InputNonSyncBase; import forge.game.GameState; import forge.game.phase.CombatUtil; import forge.game.player.Player; @@ -12,7 +12,7 @@ import forge.game.player.Player; * TODO: Write javadoc for this type. * */ -public class AiInputBlock extends InputBase { +public class AiInputBlock extends InputNonSyncBase { private final GameState game; /** * TODO: Write javadoc for Constructor. diff --git a/src/main/java/forge/game/ai/AiInputCommon.java b/src/main/java/forge/game/ai/AiInputCommon.java index 30abccbcc94..631a06fb7fc 100644 --- a/src/main/java/forge/game/ai/AiInputCommon.java +++ b/src/main/java/forge/game/ai/AiInputCommon.java @@ -17,7 +17,7 @@ */ package forge.game.ai; -import forge.control.input.InputBase; +import forge.control.input.InputNonSyncBase; /** *

@@ -27,7 +27,7 @@ import forge.control.input.InputBase; * @author Forge * @version $Id$ */ -public class AiInputCommon extends InputBase implements AiInput { +public class AiInputCommon extends InputNonSyncBase implements AiInput { /** Constant serialVersionUID=-3091338639571662216L. */ private static final long serialVersionUID = -3091338639571662216L; diff --git a/src/main/java/forge/gui/InputProxy.java b/src/main/java/forge/gui/InputProxy.java index bcf7c13952e..9a46aad7b74 100644 --- a/src/main/java/forge/gui/InputProxy.java +++ b/src/main/java/forge/gui/InputProxy.java @@ -82,7 +82,7 @@ public class InputProxy implements Observer { @Override public void run() { if(INPUT_DEBUG) System.out.printf("%s > showMessage @ %s during %s%n", FThreads.debugGetCurrThreadId(), nextInput.getClass().getSimpleName(), ph.debugPrintState()); - nextInput.showMessage(); + nextInput.showMessage(game.getInputQueue()); } }; // if( nextInput instanceof AiInput )