Inputs: InputBase no longer requires neither InputQueue nor Player in constructor. Only some subclasses require player member.

InputNonSyncBase - base class for non-waiting inputs
This commit is contained in:
Maxmtg
2013-05-24 22:31:11 +00:00
parent c3d90f185a
commit 0b8b8c043d
19 changed files with 59 additions and 45 deletions

1
.gitattributes vendored
View File

@@ -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/InputCleanup.java svneol=native#text/plain
src/main/java/forge/control/input/InputConfirmMulligan.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/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/InputPassPriority.java svneol=native#text/plain
src/main/java/forge/control/input/InputPayManaBase.java -text src/main/java/forge/control/input/InputPayManaBase.java -text
src/main/java/forge/control/input/InputPayManaExecuteCommands.java svneol=native#text/plain src/main/java/forge/control/input/InputPayManaExecuteCommands.java svneol=native#text/plain

View File

@@ -10,7 +10,7 @@ import forge.game.player.Player;
public interface Input { public interface Input {
// showMessage() is always the first method called // showMessage() is always the first method called
void showMessage(); void showMessage(InputQueue iq);
void selectCard(Card c, boolean isMetaDown); void selectCard(Card c, boolean isMetaDown);

View File

@@ -42,7 +42,7 @@ import forge.view.ButtonUtil;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class InputAttack extends InputBase { public class InputAttack extends InputNonSyncBase {
/** Constant <code>serialVersionUID=7849903731842214245L</code>. */ /** Constant <code>serialVersionUID=7849903731842214245L</code>. */
private static final long serialVersionUID = 7849903731842214245L; private static final long serialVersionUID = 7849903731842214245L;

View File

@@ -6,7 +6,7 @@ import forge.game.player.Player;
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
* *
*/ */
public class InputAutoPassPriority extends InputBase { public class InputAutoPassPriority extends InputNonSyncBase {
private static final long serialVersionUID = -7520803307255234647L; private static final long serialVersionUID = -7520803307255234647L;
public InputAutoPassPriority(Player player) { public InputAutoPassPriority(Player player) {

View File

@@ -18,7 +18,6 @@
package forge.control.input; package forge.control.input;
import forge.Card; import forge.Card;
import forge.FThreads;
import forge.game.player.Player; import forge.game.player.Player;
import forge.gui.framework.SDisplayUtil; import forge.gui.framework.SDisplayUtil;
import forge.gui.match.CMatchUI; import forge.gui.match.CMatchUI;
@@ -35,14 +34,16 @@ import forge.gui.match.views.VMessage;
public abstract class InputBase implements java.io.Serializable, Input { public abstract class InputBase implements java.io.Serializable, Input {
/** Constant <code>serialVersionUID=-6539552513871194081L</code>. */ /** Constant <code>serialVersionUID=-6539552513871194081L</code>. */
private static final long serialVersionUID = -6539552513871194081L; private static final long serialVersionUID = -6539552513871194081L;
protected final Player player; private InputQueue queue;
public InputBase(Player player) {
this.player = player;
}
// showMessage() is always the first method called // showMessage() is always the first method called
@Override @Override
public abstract void showMessage(); public final void showMessage(InputQueue iq) {
queue = iq;
showMessage();
}
protected abstract void showMessage();
@Override @Override
public void selectCard(final Card c, boolean isMetaDown) { } 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) // Removes this input from the stack and releases any latches (in synchronous imports)
protected final void stop() { protected final void stop() {
// clears a "temp" Input like Input_PayManaCost if there is one // 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 afterStop(); // sync inputs will release their latch there
} }
protected void afterStop() { } 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() { protected final void flashIncorrectAction() {

View File

@@ -37,7 +37,7 @@ import forge.view.ButtonUtil;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class InputBlock extends InputBase { public class InputBlock extends InputNonSyncBase {
/** Constant <code>serialVersionUID=6120743598368928128L</code>. */ /** Constant <code>serialVersionUID=6120743598368928128L</code>. */
private static final long serialVersionUID = 6120743598368928128L; private static final long serialVersionUID = 6120743598368928128L;

View File

@@ -31,7 +31,7 @@ import forge.view.ButtonUtil;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class InputCleanup extends InputBase { public class InputCleanup extends InputNonSyncBase {
/** Constant <code>serialVersionUID=-4164275418971547948L</code>. */ /** Constant <code>serialVersionUID=-4164275418971547948L</code>. */
private static final long serialVersionUID = -4164275418971547948L; private static final long serialVersionUID = -4164275418971547948L;
private final GameState game; private final GameState game;

View File

@@ -39,13 +39,16 @@ public class InputConfirmMulligan extends InputSyncronizedBase {
/** Constant <code>serialVersionUID=-8112954303001155622L</code>. */ /** Constant <code>serialVersionUID=-8112954303001155622L</code>. */
private static final long serialVersionUID = -8112954303001155622L; private static final long serialVersionUID = -8112954303001155622L;
boolean keepHand = false; boolean keepHand = false;
final boolean isCommander; final boolean isCommander;
final List<Card> selected = new ArrayList<Card>();
final private Player startingPlayer; private final List<Card> selected = new ArrayList<Card>();
private final Player player;
private final Player startingPlayer;
public InputConfirmMulligan(Player humanPlayer, Player startsGame, boolean commander) { public InputConfirmMulligan(Player humanPlayer, Player startsGame, boolean commander) {
super(humanPlayer); player = humanPlayer;
isCommander = commander; isCommander = commander;
startingPlayer = startsGame; startingPlayer = startsGame;
} }

View File

@@ -15,15 +15,12 @@ import forge.view.ButtonUtil;
public class InputLockUI implements Input { public class InputLockUI implements Input {
private final AtomicInteger iCall = new AtomicInteger(); private final AtomicInteger iCall = new AtomicInteger();
private final InputQueue iq; private final InputQueue iq;
/**
* TODO: Write javadoc for Constructor.
* @param inputQueue
*/
public InputLockUI(InputQueue inputQueue) { public InputLockUI(InputQueue inputQueue) {
iq = inputQueue; iq = inputQueue;
} }
public void showMessage() { public void showMessage(InputQueue iq) {
int ixCall = 1 + iCall.getAndIncrement(); int ixCall = 1 + iCall.getAndIncrement();
FThreads.delay(500, new InputUpdater(ixCall)); FThreads.delay(500, new InputUpdater(ixCall));
} }

View File

@@ -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();
}
}

View File

@@ -33,7 +33,7 @@ import forge.view.ButtonUtil;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class InputPassPriority extends InputBase { public class InputPassPriority extends InputNonSyncBase {
/** Constant <code>serialVersionUID=-581477682214137181L</code>. */ /** Constant <code>serialVersionUID=-581477682214137181L</code>. */
private static final long serialVersionUID = -581477682214137181L; private static final long serialVersionUID = -581477682214137181L;

View File

@@ -16,6 +16,7 @@ import forge.card.spellability.AbilityManaPart;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.game.GameState; import forge.game.GameState;
import forge.game.player.HumanPlay; import forge.game.player.HumanPlay;
import forge.game.player.Player;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose; import forge.gui.GuiChoose;
@@ -29,6 +30,7 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I
protected int phyLifeToLose = 0; protected int phyLifeToLose = 0;
protected final Player player;
protected final GameState game; protected final GameState game;
protected ManaCostBeingPaid manaCost; protected ManaCostBeingPaid manaCost;
protected final SpellAbility saPaidFor; protected final SpellAbility saPaidFor;
@@ -36,7 +38,7 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I
boolean bPaid = false; boolean bPaid = false;
protected InputPayManaBase(SpellAbility saToPayFor) { protected InputPayManaBase(SpellAbility saToPayFor) {
super(saToPayFor.getActivatingPlayer()); this.player = saToPayFor.getActivatingPlayer();
this.game = player.getGame(); this.game = player.getGame();
this.saPaidFor = saToPayFor; this.saPaidFor = saToPayFor;
} }

View File

@@ -6,7 +6,6 @@ public abstract class InputSelectCards extends InputSelectManyBase<Card> {
private static final long serialVersionUID = -6609493252672573139L; private static final long serialVersionUID = -6609493252672573139L;
protected InputSelectCards(int min, int max) { protected InputSelectCards(int min, int max) {
super(min, max); super(min, max);
} }

View File

@@ -5,7 +5,6 @@ import java.util.List;
import forge.Card; import forge.Card;
import forge.GameEntity; import forge.GameEntity;
import forge.Singletons;
import forge.view.ButtonUtil; import forge.view.ButtonUtil;
public abstract class InputSelectManyBase<T extends GameEntity> extends InputSyncronizedBase implements InputSelectMany<T> { public abstract class InputSelectManyBase<T extends GameEntity> extends InputSyncronizedBase implements InputSelectMany<T> {
@@ -24,7 +23,6 @@ public abstract class InputSelectManyBase<T extends GameEntity> extends InputSyn
protected InputSelectManyBase(int min, int max) { protected InputSelectManyBase(int min, int max) {
super(Singletons.getControl().getPlayer());
selected = new ArrayList<T>(); selected = new ArrayList<T>();
if (min > max) { if (min > max) {
throw new IllegalArgumentException("Min must not be greater than Max"); throw new IllegalArgumentException("Min must not be greater than Max");

View File

@@ -43,7 +43,6 @@ public final class InputSelectTargets extends InputSyncronizedBase {
* @param mandatory * @param mandatory
*/ */
public InputSelectTargets(List<Card> choices, SpellAbility sa, boolean mandatory) { public InputSelectTargets(List<Card> choices, SpellAbility sa, boolean mandatory) {
super(sa.getActivatingPlayer());
this.choices = choices; this.choices = choices;
this.tgt = sa.getTarget(); this.tgt = sa.getTarget();
this.sa = sa; this.sa = sa;

View File

@@ -5,16 +5,15 @@ import java.util.concurrent.CountDownLatch;
import forge.Card; import forge.Card;
import forge.FThreads; import forge.FThreads;
import forge.error.BugReporter; import forge.error.BugReporter;
import forge.game.player.Player;
public abstract class InputSyncronizedBase extends InputBase implements InputSynchronized { public abstract class InputSyncronizedBase extends InputBase implements InputSynchronized {
private static final long serialVersionUID = 8756177361251703052L; private static final long serialVersionUID = 8756177361251703052L;
private boolean finished = false; private boolean finished = false;
private final CountDownLatch cdlDone; private final CountDownLatch cdlDone;
public InputSyncronizedBase(Player player) { public InputSyncronizedBase() {
super(player);
cdlDone = new CountDownLatch(1); cdlDone = new CountDownLatch(1);
} }

View File

@@ -3,7 +3,7 @@ package forge.game.ai;
import java.util.List; import java.util.List;
import forge.Card; import forge.Card;
import forge.control.input.InputBase; import forge.control.input.InputNonSyncBase;
import forge.game.GameState; import forge.game.GameState;
import forge.game.phase.CombatUtil; import forge.game.phase.CombatUtil;
import forge.game.player.Player; import forge.game.player.Player;
@@ -12,7 +12,7 @@ import forge.game.player.Player;
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
* *
*/ */
public class AiInputBlock extends InputBase { public class AiInputBlock extends InputNonSyncBase {
private final GameState game; private final GameState game;
/** /**
* TODO: Write javadoc for Constructor. * TODO: Write javadoc for Constructor.

View File

@@ -17,7 +17,7 @@
*/ */
package forge.game.ai; package forge.game.ai;
import forge.control.input.InputBase; import forge.control.input.InputNonSyncBase;
/** /**
* <p> * <p>
@@ -27,7 +27,7 @@ import forge.control.input.InputBase;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class AiInputCommon extends InputBase implements AiInput { public class AiInputCommon extends InputNonSyncBase implements AiInput {
/** Constant <code>serialVersionUID=-3091338639571662216L</code>. */ /** Constant <code>serialVersionUID=-3091338639571662216L</code>. */
private static final long serialVersionUID = -3091338639571662216L; private static final long serialVersionUID = -3091338639571662216L;

View File

@@ -82,7 +82,7 @@ public class InputProxy implements Observer {
@Override public void run() { @Override public void run() {
if(INPUT_DEBUG) if(INPUT_DEBUG)
System.out.printf("%s > showMessage @ %s during %s%n", FThreads.debugGetCurrThreadId(), nextInput.getClass().getSimpleName(), ph.debugPrintState()); 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 ) // if( nextInput instanceof AiInput )