diff --git a/.gitattributes b/.gitattributes
index 856a3ef2497..005bbf3fc4c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -14169,12 +14169,11 @@ src/main/java/forge/control/input/InputBlock.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/InputPassPriority.java svneol=native#text/plain
-src/main/java/forge/control/input/InputPayManaBase.java -text
+src/main/java/forge/control/input/InputPayMana.java -text
src/main/java/forge/control/input/InputPayManaExecuteCommands.java svneol=native#text/plain
src/main/java/forge/control/input/InputPayManaOfCostPayment.java -text
src/main/java/forge/control/input/InputPayManaSimple.java svneol=native#text/plain
src/main/java/forge/control/input/InputPayManaX.java -text
-src/main/java/forge/control/input/InputPayment.java -text
src/main/java/forge/control/input/InputPlayOrDraw.java -text
src/main/java/forge/control/input/InputProliferate.java -text
src/main/java/forge/control/input/InputQueue.java svneol=native#text/plain
diff --git a/src/main/java/forge/card/cost/CostPartMana.java b/src/main/java/forge/card/cost/CostPartMana.java
index be65e3e495b..6fd6a247edb 100644
--- a/src/main/java/forge/card/cost/CostPartMana.java
+++ b/src/main/java/forge/card/cost/CostPartMana.java
@@ -25,9 +25,9 @@ import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.mana.ManaCostShard;
import forge.card.spellability.SpellAbility;
+import forge.control.input.InputPayMana;
import forge.control.input.InputPayManaOfCostPayment;
import forge.control.input.InputPayManaX;
-import forge.control.input.InputPayment;
import forge.game.GameState;
import forge.game.ai.ComputerUtilMana;
import forge.game.player.Player;
@@ -127,9 +127,10 @@ public class CostPartMana extends CostPart {
toPay.combineManaCost(mkCost);
}
+ InputPayMana inpPayment;
toPay.applySpellCostChange(ability);
if (!toPay.isPaid()) {
- InputPayment inpPayment = new InputPayManaOfCostPayment(toPay, ability);
+ inpPayment = new InputPayManaOfCostPayment(toPay, ability);
Singletons.getControl().getInputQueue().setInputAndWait(inpPayment);
if(!inpPayment.isPaid())
return false;
@@ -140,7 +141,7 @@ public class CostPartMana extends CostPart {
if (this.getAmountOfX() > 0) {
if( !ability.isAnnouncing("X") && !xWasBilled) {
source.setXManaCostPaid(0);
- InputPayment inpPayment = new InputPayManaX(ability, this.getAmountOfX(), this.canXbe0());
+ inpPayment = new InputPayManaX(ability, this.getAmountOfX(), this.canXbe0());
Singletons.getControl().getInputQueue().setInputAndWait(inpPayment);
if(!inpPayment.isPaid())
return false;
diff --git a/src/main/java/forge/control/input/Input.java b/src/main/java/forge/control/input/Input.java
index de2ec64ec0b..d8d4fea2369 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(InputQueue iq);
+ void showMessageInitial();
void selectCard(Card c, boolean isMetaDown);
diff --git a/src/main/java/forge/control/input/InputBase.java b/src/main/java/forge/control/input/InputBase.java
index 3c586d15ccf..37b706a8708 100644
--- a/src/main/java/forge/control/input/InputBase.java
+++ b/src/main/java/forge/control/input/InputBase.java
@@ -35,46 +35,55 @@ import forge.gui.match.views.VMessage;
public abstract class InputBase implements java.io.Serializable, Input {
/** Constant serialVersionUID=-6539552513871194081L. */
private static final long serialVersionUID = -6539552513871194081L;
- private InputQueue queue;
private boolean finished = false;
protected final boolean isFinished() { return finished; }
protected final void setFinished() { finished = true; }
// showMessage() is always the first method called
@Override
- public final void showMessage(InputQueue iq) {
- queue = iq;
+ public final void showMessageInitial() {
finished = false;
showMessage();
}
protected abstract void showMessage();
- @Override
- public void selectCard(final Card c, boolean isMetaDown) { }
@Override
public void selectPlayer(final Player player) { }
+
+
@Override
- public void selectButtonOK() { }
+ public final void selectButtonCancel() {
+ if( isFinished() ) return;
+ onCancel();
+ }
+
@Override
- public void selectButtonCancel() { }
+ public final void selectButtonOK() {
+ if( isFinished() ) return;
+ onOk();
+ }
+
+ @Override
+ public final void selectCard(Card c, boolean isMetaDown) {
+ if( isFinished() ) return;
+ onCardSelected(c, isMetaDown);
+ }
+
+ protected void onCardSelected(Card c, boolean isRmb) {}
+ protected void onCancel() {}
+ protected void onOk() {}
// to remove need for CMatchUI dependence
protected final void showMessage(String message) {
CMatchUI.SINGLETON_INSTANCE.showMessage(message);
}
-
- protected void afterStop() { }
protected final void flashIncorrectAction() {
SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE);
}
- protected InputQueue getQueue() {
- return queue;
- }
-
protected String getTurnPhasePriorityMessage(Player player) {
final PhaseHandler ph = player.getGame().getPhaseHandler();
final StringBuilder sb = new StringBuilder();
diff --git a/src/main/java/forge/control/input/InputLockUI.java b/src/main/java/forge/control/input/InputLockUI.java
index 50437ae4030..4587e5880c4 100644
--- a/src/main/java/forge/control/input/InputLockUI.java
+++ b/src/main/java/forge/control/input/InputLockUI.java
@@ -4,6 +4,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import forge.Card;
import forge.FThreads;
+import forge.Singletons;
import forge.game.player.Player;
import forge.gui.match.CMatchUI;
import forge.view.ButtonUtil;
@@ -14,13 +15,11 @@ import forge.view.ButtonUtil;
*/
public class InputLockUI implements Input {
private final AtomicInteger iCall = new AtomicInteger();
- private final InputQueue iq;
public InputLockUI(InputQueue inputQueue) {
- iq = inputQueue;
}
- public void showMessage(InputQueue iq) {
+ public void showMessageInitial() {
int ixCall = 1 + iCall.getAndIncrement();
FThreads.delay(500, new InputUpdater(ixCall));
}
@@ -55,7 +54,7 @@ public class InputLockUI implements Input {
};
protected final boolean isActive() {
- return iq.getInput() == this;
+ return Singletons.getControl().getInputQueue().getInput() == this;
}
protected void showMessage(String message) {
diff --git a/src/main/java/forge/control/input/InputPayManaBase.java b/src/main/java/forge/control/input/InputPayMana.java
similarity index 95%
rename from src/main/java/forge/control/input/InputPayManaBase.java
rename to src/main/java/forge/control/input/InputPayMana.java
index b16e41d688c..cb75b6ff91d 100644
--- a/src/main/java/forge/control/input/InputPayManaBase.java
+++ b/src/main/java/forge/control/input/InputPayMana.java
@@ -26,7 +26,7 @@ import forge.view.ButtonUtil;
* TODO: Write javadoc for this type.
*
*/
-public abstract class InputPayManaBase extends InputSyncronizedBase implements InputPayment {
+public abstract class InputPayMana extends InputSyncronizedBase {
private static final long serialVersionUID = -9133423708688480255L;
@@ -39,7 +39,7 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I
boolean bPaid = false;
- protected InputPayManaBase(SpellAbility saToPayFor) {
+ protected InputPayMana(SpellAbility saToPayFor) {
this.player = saToPayFor.getActivatingPlayer();
this.game = player.getGame();
this.saPaidFor = saToPayFor;
diff --git a/src/main/java/forge/control/input/InputPayManaExecuteCommands.java b/src/main/java/forge/control/input/InputPayManaExecuteCommands.java
index 2dc943de3e5..93f148220c7 100644
--- a/src/main/java/forge/control/input/InputPayManaExecuteCommands.java
+++ b/src/main/java/forge/control/input/InputPayManaExecuteCommands.java
@@ -33,7 +33,7 @@ import forge.game.player.Player;
* @author Forge
* @version $Id$
*/
-public class InputPayManaExecuteCommands extends InputPayManaBase {
+public class InputPayManaExecuteCommands extends InputPayMana {
/**
* Constant serialVersionUID=3836655722696348713L.
*/
diff --git a/src/main/java/forge/control/input/InputPayManaOfCostPayment.java b/src/main/java/forge/control/input/InputPayManaOfCostPayment.java
index e698e5ddfb2..12390a59858 100644
--- a/src/main/java/forge/control/input/InputPayManaOfCostPayment.java
+++ b/src/main/java/forge/control/input/InputPayManaOfCostPayment.java
@@ -5,7 +5,7 @@ import forge.card.mana.ManaCostBeingPaid;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
-public class InputPayManaOfCostPayment extends InputPayManaBase {
+public class InputPayManaOfCostPayment extends InputPayMana {
public InputPayManaOfCostPayment(ManaCostBeingPaid cost, SpellAbility spellAbility) {
super(spellAbility);
diff --git a/src/main/java/forge/control/input/InputPayManaSimple.java b/src/main/java/forge/control/input/InputPayManaSimple.java
index f27609803aa..6e9b33ae649 100644
--- a/src/main/java/forge/control/input/InputPayManaSimple.java
+++ b/src/main/java/forge/control/input/InputPayManaSimple.java
@@ -28,7 +28,7 @@ import forge.view.ButtonUtil;
//pays the cost of a card played from the player's hand
//the card is removed from the players hand if the cost is paid
//CANNOT be used for ABILITIES
-public class InputPayManaSimple extends InputPayManaBase {
+public class InputPayManaSimple extends InputPayMana {
// anything that uses this should be converted to Ability_Cost
/** Constant serialVersionUID=3467312982164195091L. */
private static final long serialVersionUID = 3467312982164195091L;
diff --git a/src/main/java/forge/control/input/InputPayManaX.java b/src/main/java/forge/control/input/InputPayManaX.java
index b21ce63c655..0111bae6c56 100644
--- a/src/main/java/forge/control/input/InputPayManaX.java
+++ b/src/main/java/forge/control/input/InputPayManaX.java
@@ -11,7 +11,7 @@ import forge.card.mana.ManaCostBeingPaid;
import forge.card.spellability.SpellAbility;
import forge.view.ButtonUtil;
-public class InputPayManaX extends InputPayManaBase {
+public class InputPayManaX extends InputPayMana {
private static final long serialVersionUID = -6900234444347364050L;
private int xPaid = 0;
private byte colorsPaid;
diff --git a/src/main/java/forge/control/input/InputPayment.java b/src/main/java/forge/control/input/InputPayment.java
deleted file mode 100644
index b166bf70fcf..00000000000
--- a/src/main/java/forge/control/input/InputPayment.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package forge.control.input;
-
-public interface InputPayment extends InputSynchronized {
- boolean isPaid();
-}
\ No newline at end of file
diff --git a/src/main/java/forge/control/input/InputSelectManyBase.java b/src/main/java/forge/control/input/InputSelectManyBase.java
index d7038666038..157c0ced342 100644
--- a/src/main/java/forge/control/input/InputSelectManyBase.java
+++ b/src/main/java/forge/control/input/InputSelectManyBase.java
@@ -126,9 +126,6 @@ public abstract class InputSelectManyBase extends InputSyn
for(T c : selected)
if( c instanceof Card)
((Card)c).setUsedToPay(false);
-
- super.afterStop(); // It's ultimatelly important to keep call to super class!
-
}
diff --git a/src/main/java/forge/control/input/InputSyncronizedBase.java b/src/main/java/forge/control/input/InputSyncronizedBase.java
index 9306756e56d..5677687c9b3 100644
--- a/src/main/java/forge/control/input/InputSyncronizedBase.java
+++ b/src/main/java/forge/control/input/InputSyncronizedBase.java
@@ -2,17 +2,14 @@ package forge.control.input;
import java.util.concurrent.CountDownLatch;
-import forge.Card;
import forge.FThreads;
+import forge.Singletons;
import forge.error.BugReporter;
public abstract class InputSyncronizedBase extends InputBase implements InputSynchronized {
private static final long serialVersionUID = 8756177361251703052L;
-
-
private final CountDownLatch cdlDone;
-
public InputSyncronizedBase() {
cdlDone = new CountDownLatch(1);
}
@@ -35,30 +32,7 @@ public abstract class InputSyncronizedBase extends InputBase implements InputSyn
FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() { setFinished(); } });
// thread irrelevant
- getQueue().removeInput(InputSyncronizedBase.this);
+ Singletons.getControl().getInputQueue().removeInput(InputSyncronizedBase.this);
cdlDone.countDown();
}
-
- @Override
- public final void selectButtonCancel() {
- if( isFinished() ) return;
- onCancel();
- }
-
- @Override
- public final void selectButtonOK() {
- if( isFinished() ) return;
- onOk();
- }
-
- @Override
- public final void selectCard(Card c, boolean isMetaDown) {
- if( isFinished() ) return;
- onCardSelected(c, isMetaDown);
- }
-
- protected void onCardSelected(Card c, boolean isRmb) {}
- protected void onCancel() {}
- protected void onOk() {}
-
}
\ No newline at end of file
diff --git a/src/main/java/forge/game/GameAction.java b/src/main/java/forge/game/GameAction.java
index cfb72b26217..602081551e4 100644
--- a/src/main/java/forge/game/GameAction.java
+++ b/src/main/java/forge/game/GameAction.java
@@ -1479,7 +1479,7 @@ public class GameAction {
game.getAction().checkStateEffects();
}
- public void mulligan(final Player firstPlayer) {
+ public void startGame(final Player firstPlayer) {
performMulligans(firstPlayer, game.getType() == GameType.Commander);
game.setAge(GameAge.Play);
diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java
index 7b760d0e4a9..02711b40b9e 100644
--- a/src/main/java/forge/game/GameNew.java
+++ b/src/main/java/forge/game/GameNew.java
@@ -334,9 +334,6 @@ public class GameNew {
// ultimate of Karn the Liberated
public static void restartGame(final GameState game, final Player startingTurn, Map> playerLibraries) {
- game.setAge(GameAge.Mulligan);
- game.getAction().mulligan(startingTurn);
-
//Card.resetUniqueNumber();
// need this code here, otherwise observables fail
forge.card.trigger.Trigger.resetIDs();
@@ -376,11 +373,15 @@ public class GameNew {
PhaseHandler phaseHandler = game.getPhaseHandler();
phaseHandler.setPlayerTurn(startingTurn);
-
+
+ game.setAge(GameAge.Mulligan);
// Draw cards
for (final Player p : game.getPlayers()) {
p.drawCards(p.getMaxHandSize());
}
+
+
+ game.getAction().startGame(startingTurn);
}
diff --git a/src/main/java/forge/game/MatchState.java b/src/main/java/forge/game/MatchState.java
index 9156d1fe533..0561c7834d7 100644
--- a/src/main/java/forge/game/MatchState.java
+++ b/src/main/java/forge/game/MatchState.java
@@ -125,7 +125,7 @@ public class MatchState {
}
currentGame.setAge(GameAge.Mulligan);
- currentGame.getAction().mulligan(firstPlayer);
+ currentGame.getAction().startGame(firstPlayer);
}
});
}
diff --git a/src/main/java/forge/game/player/HumanPlay.java b/src/main/java/forge/game/player/HumanPlay.java
index 9371e53b2e6..8bd4ce4769a 100644
--- a/src/main/java/forge/game/player/HumanPlay.java
+++ b/src/main/java/forge/game/player/HumanPlay.java
@@ -39,10 +39,9 @@ import forge.card.spellability.Ability;
import forge.card.spellability.HumanPlaySpellAbility;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
-import forge.control.input.InputPayManaBase;
+import forge.control.input.InputPayMana;
import forge.control.input.InputPayManaExecuteCommands;
import forge.control.input.InputPayManaSimple;
-import forge.control.input.InputPayment;
import forge.control.input.InputSelectCards;
import forge.control.input.InputSelectCardsFromList;
import forge.game.GameActionUtil;
@@ -160,7 +159,7 @@ public class HumanPlay {
boolean isPaid = manaCost.isPaid();
if( !isPaid ) {
- InputPayManaBase inputPay = new InputPayManaSimple(p.getGame(), sa, manaCost);
+ InputPayMana inputPay = new InputPayManaSimple(p.getGame(), sa, manaCost);
Singletons.getControl().getInputQueue().setInputAndWait(inputPay);
isPaid = inputPay.isPaid();
}
@@ -454,7 +453,7 @@ public class HumanPlay {
if (!(costPart instanceof CostPartMana ))
throw new RuntimeException("GameActionUtil.payCostDuringAbilityResolve - The remaining payment type is not Mana.");
- InputPayment toSet = current == null
+ InputPayMana toSet = current == null
? new InputPayManaExecuteCommands(p, source + "\r\n", cost.getCostMana().getManaToPay())
: new InputPayManaExecuteCommands(p, source + "\r\n" + "Current Card: " + current + "\r\n" , cost.getCostMana().getManaToPay());
Singletons.getControl().getInputQueue().setInputAndWait(toSet);
diff --git a/src/main/java/forge/gui/InputProxy.java b/src/main/java/forge/gui/InputProxy.java
index 1d9e9f6d106..05b819b1156 100644
--- a/src/main/java/forge/gui/InputProxy.java
+++ b/src/main/java/forge/gui/InputProxy.java
@@ -51,8 +51,6 @@ public class InputProxy implements Observer {
@Override
public final void update(final Observable observable, final Object obj) {
- synchronized(this) {} // want to update all changes to memory
-
final Input nextInput = Singletons.getControl().getInputQueue().getActualInput(game);
/* if(DEBUG_INPUT)
@@ -65,7 +63,7 @@ public class InputProxy implements Observer {
@Override public void run() {
Input current = getInput();
//System.out.printf("\t%s > showMessage @ %s/%s during %s%n", FThreads.debugGetCurrThreadId(), nextInput.getClass().getSimpleName(), current.getClass().getSimpleName(), game.getPhaseHandler().debugPrintState());
- current.showMessage(Singletons.getControl().getInputQueue());
+ current.showMessageInitial();
}
};
@@ -117,10 +115,10 @@ public class InputProxy implements Observer {
* @param zone
* a {@link forge.game.zone.PlayerZone} object.
*/
- public final void selectCard(final Card card) {
+ public final void selectCard(final Card card, boolean isRightButton) {
Input inp = getInput();
if ( null != inp )
- inp.selectCard(card, false);
+ inp.selectCard(card, isRightButton);
}
/** {@inheritDoc} */
@@ -131,7 +129,7 @@ public class InputProxy implements Observer {
}
/** @return {@link forge.gui.InputProxy.InputBase} */
- public Input getInput() {
+ private Input getInput() {
return this.input.get();
}
}
diff --git a/src/main/java/forge/gui/match/nonsingleton/CCommand.java b/src/main/java/forge/gui/match/nonsingleton/CCommand.java
index 0d5559ecf49..51c91d8578f 100644
--- a/src/main/java/forge/gui/match/nonsingleton/CCommand.java
+++ b/src/main/java/forge/gui/match/nonsingleton/CCommand.java
@@ -116,7 +116,7 @@ public class CCommand implements ICDoc {
if (c != null && c.isInZone(ZoneType.Command)) {
//TODO: Cast commander/activate avatar/roll planar dice here.
- CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c);
+ CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, e.isMetaDown());
}
}
diff --git a/src/main/java/forge/gui/match/nonsingleton/CField.java b/src/main/java/forge/gui/match/nonsingleton/CField.java
index 29b41071c1f..36e1142a68a 100644
--- a/src/main/java/forge/gui/match/nonsingleton/CField.java
+++ b/src/main/java/forge/gui/match/nonsingleton/CField.java
@@ -36,7 +36,7 @@ import forge.Constant.Preferences;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
-import forge.control.input.InputPayManaBase;
+import forge.control.input.InputPayMana;
import forge.game.GameState;
import forge.game.player.HumanPlay;
import forge.game.player.LobbyPlayer;
@@ -185,29 +185,21 @@ public class CField implements ICDoc {
// Roujin's bug fix version dated 2-12-2012
final Card c = CField.this.view.getTabletop().getHoveredCard(e);
- final Input input = CMessage.SINGLETON_INSTANCE.getInputControl().getInput();
if (c == null || !c.isInZone(ZoneType.Battlefield)) {
return;
}
- //Yosei, the Morning Star required cards to be chosen on computer side
- //earlier it was enforced that cards must be in player zone
- //this can potentially break some other functionality
- //(tapping lands works ok but some custom cards may not...)
- if ( input != null ){
- input.selectCard(c, e.isMetaDown());
- }
-
+ CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, e.isMetaDown());
}
/** */
private void manaAction(byte colorCode) {
if (CField.this.player.getLobbyPlayer() == CField.this.viewer) {
final Input in = Singletons.getControl().getInputQueue().getInput();
- if (in instanceof InputPayManaBase) {
+ if (in instanceof InputPayMana) {
// Do something
- ((InputPayManaBase) in).selectManaPool(colorCode);
+ ((InputPayMana) in).selectManaPool(colorCode);
}
}
}
diff --git a/src/main/java/forge/gui/match/nonsingleton/CHand.java b/src/main/java/forge/gui/match/nonsingleton/CHand.java
index ecb6388cf76..a9ea1305eda 100644
--- a/src/main/java/forge/gui/match/nonsingleton/CHand.java
+++ b/src/main/java/forge/gui/match/nonsingleton/CHand.java
@@ -105,7 +105,7 @@ public class CHand implements ICDoc, Observer {
public void mousePressed(final MouseEvent e) {
if (e.getButton() != MouseEvent.BUTTON1) { return; }
- CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(cardobj);
+ CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(cardobj, e.isMetaDown());
}
});
}
@@ -116,7 +116,7 @@ public class CHand implements ICDoc, Observer {
}
final Card c = view.getHandArea().getHoveredCard(e);
if (c != null) {
- CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c);
+ CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, e.isMetaDown());
}
}