+ * removeAll. + *
+ * + * @param c + * a {@link forge.Card} object. + */ + public final void removeAll(final CardList list) { + for (Card c : list) { + this.list.remove(c); + } + } + /** *
* clear.
diff --git a/src/main/java/forge/CardListUtil.java b/src/main/java/forge/CardListUtil.java
index 83768277ce9..0d3fe65e9bd 100644
--- a/src/main/java/forge/CardListUtil.java
+++ b/src/main/java/forge/CardListUtil.java
@@ -410,8 +410,8 @@ public class CardListUtil {
final Comparator
diff --git a/src/main/java/forge/GameLog.java b/src/main/java/forge/GameLog.java
index acb8b3b7270..d986eb12c7c 100644
--- a/src/main/java/forge/GameLog.java
+++ b/src/main/java/forge/GameLog.java
@@ -20,6 +20,8 @@ package forge;
import java.util.ArrayList;
+import forge.util.MyObservable;
+
/**
*
diff --git a/src/main/java/forge/card/CardCharacteristics.java b/src/main/java/forge/card/CardCharacteristics.java
index 720555c756c..81776108a15 100644
--- a/src/main/java/forge/card/CardCharacteristics.java
+++ b/src/main/java/forge/card/CardCharacteristics.java
@@ -34,7 +34,7 @@ import forge.card.trigger.Trigger;
public class CardCharacteristics {
private String name = "";
private ArrayList
- * CardOracle class.
- *
+ * getWorstAI.
+ *
@@ -908,17 +921,15 @@ public class CardFactoryUtil {
* a {@link forge.Card} object.
* @param cost
* a {@link forge.card.cost.Cost} object.
- * @param orgManaCost
- * a {@link java.lang.String} object.
* @param a
* a int.
* @param d
* a int.
* @return a {@link forge.card.spellability.AbilityActivated} object.
*/
- public static AbilityStatic abilityMorphUp(final Card sourceCard, final Cost cost, final String orgManaCost,
- final int a, final int d) {
+ public static AbilityStatic abilityMorphUp(final Card sourceCard, final Cost cost, final int a, final int d) {
final AbilityStatic morphUp = new AbilityStatic(sourceCard, cost, null) {
+
@Override
public void resolve() {
if (sourceCard.turnFaceUp()) {
@@ -1049,8 +1060,7 @@ public class CardFactoryUtil {
final CardList sameCost = new CardList();
for (int i = 0; i < cards.size(); i++) {
- if (CardUtil.getConvertedManaCost(cards.get(i).getManaCost()) == CardUtil
- .getConvertedManaCost(sourceCard.getManaCost())) {
+ if (cards.get(i).getManaCost().getCMC() == sourceCard.getManaCost().getCMC()) {
sameCost.add(cards.get(i));
}
}
@@ -1453,8 +1463,7 @@ public class CardFactoryUtil {
final CardList sameCost = new CardList();
final int cost = CardUtil.getConvertedManaCost(manacost);
for (int i = 0; i < cards.size(); i++) {
- if ((CardUtil.getConvertedManaCost(cards.get(i).getManaCost()) <= cost)
- && cards.get(i).isType("Spirit")) {
+ if (cards.get(i).getManaCost().getCMC() <= cost && cards.get(i).isType("Spirit")) {
sameCost.add(cards.get(i));
}
}
@@ -1881,7 +1890,7 @@ public class CardFactoryUtil {
for (int i = 0; i < cards.size(); i++) {
final Card c = cards.get(i);
if (!c.isToken()) {
- String manaCost = c.getManaCost();
+ String manaCost = c.getManaCost().toString();
manaCost = manaCost.trim();
count += CardFactoryUtil.countOccurrences(manaCost, colorAbb);
}
@@ -3092,7 +3101,7 @@ public class CardFactoryUtil {
int mmc = 0;
int cmc = 0;
for (int i = 0; i < someCards.size(); i++) {
- cmc = CardUtil.getConvertedManaCost(someCards.getCard(i).getManaCost());
+ cmc = someCards.getCard(i).getManaCost().getCMC();
if (cmc > mmc) {
mmc = cmc;
}
@@ -3584,7 +3593,7 @@ public class CardFactoryUtil {
final String[] tokenKeywords = new String[kal.size()];
kal.toArray(tokenKeywords);
final CardList tokens = CardFactoryUtil.makeToken(thisToken.getName(), thisToken.getImageName(),
- thisToken.getController(), thisToken.getManaCost(), tokenTypes, thisToken.getBaseAttack(),
+ thisToken.getController(), thisToken.getManaCost().toString(), tokenTypes, thisToken.getBaseAttack(),
thisToken.getBaseDefense(), tokenKeywords);
for (final Card token : tokens) {
@@ -3896,7 +3905,7 @@ public class CardFactoryUtil {
final String bbCost = card.getSVar("Buyback");
if (!bbCost.equals("")) {
final SpellAbility bbSA = sa.copy();
- final String newCost = CardUtil.addManaCosts(card.getManaCost(), bbCost);
+ final String newCost = CardUtil.addManaCosts(card.getManaCost().toString(), bbCost);
if (bbSA.getPayCosts() != null) {
// create new Cost
bbSA.setPayCosts(new Cost(card, newCost, false));
@@ -3952,7 +3961,7 @@ public class CardFactoryUtil {
final String[] k = parse.split(":");
final String kickerCost = k[1];
- final ManaCost mc = new ManaCost(card.getManaCost());
+ final ManaCost mc = new ManaCost(card.getManaCost().toString());
mc.combineManaCost(kickerCost);
kickedSpell.setKickerAbility(true);
@@ -4130,15 +4139,11 @@ public class CardFactoryUtil {
}
} // Suspend
- if (card.getManaCost().contains("X")) {
+ int xCount = card.getManaCost().getShardCount(ManaCostShard.X);
+ if (xCount > 0) {
final SpellAbility sa = card.getSpellAbility()[0];
sa.setIsXCost(true);
-
- if (card.getManaCost().startsWith("X X")) {
- sa.setXManaCost("2");
- } else if (card.getManaCost().startsWith("X")) {
- sa.setXManaCost("1");
- }
+ sa.setXManaCost(Integer.toString(xCount));
} // X
int cardnameSpot = CardFactoryUtil.hasKeyword(card, "CARDNAME is ");
@@ -4686,13 +4691,11 @@ public class CardFactoryUtil {
final int attack = card.getBaseAttack();
final int defense = card.getBaseDefense();
- final String orgManaCost = card.getManaCost();
-
card.addSpellAbility(CardFactoryUtil.abilityMorphDown(card));
card.turnFaceDown();
- card.addSpellAbility(CardFactoryUtil.abilityMorphUp(card, cost, orgManaCost, attack, defense));
+ card.addSpellAbility(CardFactoryUtil.abilityMorphUp(card, cost, attack, defense));
card.turnFaceUp();
}
diff --git a/src/main/java/forge/card/cost/Cost.java b/src/main/java/forge/card/cost/Cost.java
index 5db2f3dfd36..3afd3a07b38 100644
--- a/src/main/java/forge/card/cost/Cost.java
+++ b/src/main/java/forge/card/cost/Cost.java
@@ -23,6 +23,7 @@ import java.util.regex.Pattern;
import forge.Card;
import forge.Counters;
import forge.Singletons;
+import forge.card.CardManaCost;
import forge.card.mana.ManaCost;
import forge.card.spellability.SpellAbility;
import forge.game.zone.ZoneType;
@@ -144,6 +145,11 @@ public class Cost {
private static final String RETURN_STR = "Return<";
private static final String REVEAL_STR = "Reveal<";
+
+ public Cost(final Card card, CardManaCost cost, final boolean bAbility) {
+ this(card, cost.toString(), bAbility);
+ }
+
/**
*
* Constructor for Cost.
diff --git a/src/main/java/forge/card/spellability/SpellAbility.java b/src/main/java/forge/card/spellability/SpellAbility.java
index cc17076de2e..67d48b0412c 100644
--- a/src/main/java/forge/card/spellability/SpellAbility.java
+++ b/src/main/java/forge/card/spellability/SpellAbility.java
@@ -25,6 +25,7 @@ import forge.CardList;
import forge.Command;
import forge.CommandArgs;
import forge.GameEntity;
+import forge.card.CardManaCost;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.cost.Cost;
import forge.card.mana.Mana;
@@ -267,10 +268,14 @@ public abstract class SpellAbility {
* @param cost
* a {@link java.lang.String} object.
*/
- public void setManaCost(final String cost) {
- this.manaCost = cost;
+ public void setManaCost(final CardManaCost cost) {
+ this.manaCost = cost.toString();
}
+ public void setManaCost(final String cost) {
+ this.manaCost = cost;
+ }
+
/**
*
* Getter for the field
+ * Setter for the field
+ * Getter for the field
@@ -75,11 +87,23 @@ public enum FControl {
* instantiated separately by each state's top level view class.
*/
private FControl() {
+ this.waDefault = new WindowAdapter() {
+ @Override
+ public void windowClosing(final WindowEvent e) {
+ Singletons.getView().getFrame().setDefaultCloseOperation(
+ WindowConstants.EXIT_ON_CLOSE);
+
+ System.exit(0);
+ }
+ };
+
// "Close" button override during match
this.waConcede = new WindowAdapter() {
@Override
public void windowClosing(final WindowEvent e) {
- Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+ Singletons.getView().getFrame().setDefaultCloseOperation(
+ WindowConstants.DO_NOTHING_ON_CLOSE);
+
CDock.SINGLETON_INSTANCE.concede();
}
};
@@ -88,19 +112,27 @@ public enum FControl {
this.waLeaveBazaar = new WindowAdapter() {
@Override
public void windowClosing(final WindowEvent e) {
- Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
- changeState(0);
- SubmenuQuestUtil.updateStatsAndPet();
+ Singletons.getView().getFrame().setDefaultCloseOperation(
+ WindowConstants.DO_NOTHING_ON_CLOSE);
+
+ changeState(FControl.HOME_SCREEN);
+ SSubmenuQuestUtil.updateStatsAndPet();
}
};
- // Default action on window close
- this.waDefault = new WindowAdapter() {
- @Override
- public void windowClosing(final WindowEvent e) {
- Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- }
+ this.waLeaveEditor = new WindowAdapter() {
+ @Override
+ public void windowClosing(final WindowEvent ev) {
+ Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+
+ if (CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().exit()) {
+ changeState(FControl.HOME_SCREEN);
+ }
+ }
};
+
+ FView.SINGLETON_INSTANCE.getLpnDocument().addMouseListener(SOverflowUtil.getHideOverflowListener());
+ FView.SINGLETON_INSTANCE.getLpnDocument().addComponentListener(SResizingUtil.getWindowResizeListener());
}
/** After view and model have been initialized, control can start. */
@@ -117,8 +149,6 @@ public enum FControl {
this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts();
this.display = FView.SINGLETON_INSTANCE.getLpnDocument();
- //Singletons.getView().initialize();
-
// Handles resizing in null layouts of layers in JLayeredPane.
Singletons.getView().getFrame().addComponentListener(new ComponentAdapter() {
@Override
@@ -141,17 +171,19 @@ public enum FControl {
clearChildren(JLayeredPane.DEFAULT_LAYER);
this.state = i0;
- /// TODO should these be here?
+ Singletons.getView().getFrame().removeWindowListener(waDefault);
Singletons.getView().getFrame().removeWindowListener(waConcede);
Singletons.getView().getFrame().removeWindowListener(waLeaveBazaar);
- Singletons.getView().getFrame().addWindowListener(waDefault);
+ Singletons.getView().getFrame().removeWindowListener(waLeaveEditor);
// Fire up new state
switch (i0) {
case HOME_SCREEN:
+ Singletons.getView().getFrame().addWindowListener(waDefault);
VHomeUI.SINGLETON_INSTANCE.populate();
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(false);
- //sizeChildren();
+ VHomeUI.SINGLETON_INSTANCE.updateLayout();
+ sizeChildren();
break;
case MATCH_SCREEN:
@@ -160,8 +192,14 @@ public enum FControl {
Singletons.getView().getFrame().addWindowListener(waConcede);
break;
- case DEFAULT_EDITOR:
- display.add(Singletons.getView().getViewEditor(), JLayeredPane.DEFAULT_LAYER);
+ case DECK_EDITOR_CONSTRUCTED:
+ case DECK_EDITOR_LIMITED:
+ case DECK_EDITOR_QUEST:
+ case QUEST_CARD_SHOP:
+ case DRAFTING_PROCESS:
+ VDeckEditorUI.SINGLETON_INSTANCE.populate();
+ FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true);
+ Singletons.getView().getFrame().addWindowListener(waLeaveEditor);
break;
case QUEST_BAZAAR:
diff --git a/src/main/java/forge/control/input/InputControl.java b/src/main/java/forge/control/input/InputControl.java
index b127521e72f..806757362fb 100644
--- a/src/main/java/forge/control/input/InputControl.java
+++ b/src/main/java/forge/control/input/InputControl.java
@@ -21,13 +21,13 @@ import java.util.LinkedList;
import java.util.Stack;
import forge.AllZone;
-import forge.MyObservable;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
import forge.game.player.ComputerAIInput;
import forge.game.player.Player;
import forge.gui.match.CMatchUI;
import forge.model.FModel;
+import forge.util.MyObservable;
/**
*
diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java
index ee4cf8a67aa..5413a3823e9 100644
--- a/src/main/java/forge/deck/Deck.java
+++ b/src/main/java/forge/deck/Deck.java
@@ -33,7 +33,7 @@ import org.apache.commons.lang3.StringUtils;
import forge.deck.io.DeckFileHeader;
import forge.deck.io.DeckSerializer;
-import forge.gui.deckeditor.elements.TableSorter;
+import forge.gui.deckeditor.tables.TableSorter;
import forge.item.CardPrinted;
import forge.item.ItemPoolView;
import forge.util.FileSection;
diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java
index 69ad820af9d..a5f685ebee6 100644
--- a/src/main/java/forge/game/GameNew.java
+++ b/src/main/java/forge/game/GameNew.java
@@ -490,14 +490,12 @@ public class GameNew {
sb.append(ForgeProps.getLocalized(GameActionText.COMPUTER_CUT) + ga.getComputerCut().getName() + " ("
+ ga.getComputerCut().getManaCost() + ")" + "\r\n");
sb.append("\r\n" + "Number of times the deck has been cut: " + cutCount + "\r\n");
- if (CardUtil.getConvertedManaCost(ga.getComputerCut().getManaCost()) > CardUtil.getConvertedManaCost(
- ga.getHumanCut().getManaCost())) {
+ if (ga.getComputerCut().getManaCost().getCMC() > ga.getHumanCut().getManaCost().getCMC()) {
GameNew.computerStartsGame();
JOptionPane.showMessageDialog(null, sb + ForgeProps.getLocalized(GameActionText.COMPUTER_STARTS), "",
JOptionPane.INFORMATION_MESSAGE);
return;
- } else if (CardUtil.getConvertedManaCost(ga.getComputerCut().getManaCost()) < CardUtil
- .getConvertedManaCost(ga.getHumanCut().getManaCost())) {
+ } else if (ga.getComputerCut().getManaCost().getCMC() < ga.getHumanCut().getManaCost().getCMC()) {
JOptionPane.showMessageDialog(null, sb + ForgeProps.getLocalized(GameActionText.HUMAN_STARTS), "",
JOptionPane.INFORMATION_MESSAGE);
return;
diff --git a/src/main/java/forge/game/limited/BoosterDraft.java b/src/main/java/forge/game/limited/BoosterDraft.java
index 6daa597e514..ab08aae76c0 100644
--- a/src/main/java/forge/game/limited/BoosterDraft.java
+++ b/src/main/java/forge/game/limited/BoosterDraft.java
@@ -290,7 +290,12 @@ public final class BoosterDraft implements IBoosterDraft {
}
} // computerChoose()
- private int getCurrentBoosterIndex() {
+ /**
+ *
+ * TODO: Write javadoc for this method.
+ * @return int
+ */
+ public int getCurrentBoosterIndex() {
return this.currentBoosterPick % BoosterDraft.N_PLAYERS;
}
diff --git a/src/main/java/forge/game/limited/BoosterDraftAI.java b/src/main/java/forge/game/limited/BoosterDraftAI.java
index 2a192e3ea4e..9a7c5553b72 100644
--- a/src/main/java/forge/game/limited/BoosterDraftAI.java
+++ b/src/main/java/forge/game/limited/BoosterDraftAI.java
@@ -31,6 +31,9 @@ import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.Constant;
+import forge.card.CardColor;
+import forge.card.CardManaCost;
+import forge.card.mana.ManaCostShard;
import forge.card.spellability.AbilityMana;
import forge.deck.Deck;
import forge.util.MyRandom;
@@ -514,23 +517,22 @@ public class BoosterDraftAI {
// count each card color using mana costs
// TODO: count hybrid mana differently?
for (i = 0; i < outList.size(); i++) {
- final String mc = outList.get(i).getManaCost();
+ final CardManaCost mc = outList.get(i).getManaCost();
// count each mana symbol in the mana cost
- for (int j = 0; j < mc.length(); j++) {
- final char c = mc.charAt(j);
-
- if (c == 'W') {
+ for (ManaCostShard shard : mc.getShards()) {
+ byte mask = shard.getColorMask();
+
+ if ((mask & CardColor.WHITE) > 0 )
clrCnts[0].setCount(clrCnts[0].getCount() + 1);
- } else if (c == 'U') {
+ if ((mask & CardColor.BLUE) > 0 )
clrCnts[1].setCount(clrCnts[1].getCount() + 1);
- } else if (c == 'B') {
+ if ((mask & CardColor.BLACK) > 0 )
clrCnts[2].setCount(clrCnts[2].getCount() + 1);
- } else if (c == 'R') {
+ if ((mask & CardColor.RED) > 0 )
clrCnts[3].setCount(clrCnts[3].getCount() + 1);
- } else if (c == 'G') {
+ if ((mask & CardColor.GREEN) > 0 )
clrCnts[4].setCount(clrCnts[4].getCount() + 1);
- }
}
}
diff --git a/src/main/java/forge/game/limited/SealedDeck.java b/src/main/java/forge/game/limited/SealedDeck.java
index 62ba544c7e5..af435e5dfaf 100644
--- a/src/main/java/forge/game/limited/SealedDeck.java
+++ b/src/main/java/forge/game/limited/SealedDeck.java
@@ -32,8 +32,11 @@ import forge.Constant;
import forge.Singletons;
import forge.card.BoosterGenerator;
import forge.card.CardBlock;
+import forge.card.CardColor;
import forge.card.CardEdition;
+import forge.card.CardManaCost;
import forge.card.UnOpenedProduct;
+import forge.card.mana.ManaCostShard;
import forge.card.spellability.AbilityMana;
import forge.deck.Deck;
import forge.gui.GuiUtils;
@@ -352,23 +355,22 @@ public class SealedDeck {
// count each card color using mana costs
// TODO: count hybrid mana differently?
for (i = 0; i < deck.size(); i++) {
- final String mc = deck.get(i).getManaCost();
+ final CardManaCost mc = deck.get(i).getManaCost();
// count each mana symbol in the mana cost
- for (int j = 0; j < mc.length(); j++) {
- final char c = mc.charAt(j);
-
- if (c == 'W') {
+ for (ManaCostShard shard : mc.getShards()) {
+ byte mask = shard.getColorMask();
+
+ if ((mask & CardColor.WHITE) > 0 )
clrCnts[0].setCount(clrCnts[0].getCount() + 1);
- } else if (c == 'U') {
+ if ((mask & CardColor.BLUE) > 0 )
clrCnts[1].setCount(clrCnts[1].getCount() + 1);
- } else if (c == 'B') {
+ if ((mask & CardColor.BLACK) > 0 )
clrCnts[2].setCount(clrCnts[2].getCount() + 1);
- } else if (c == 'R') {
+ if ((mask & CardColor.RED) > 0 )
clrCnts[3].setCount(clrCnts[3].getCount() + 1);
- } else if (c == 'G') {
+ if ((mask & CardColor.GREEN) > 0 )
clrCnts[4].setCount(clrCnts[4].getCount() + 1);
- }
}
}
diff --git a/src/main/java/forge/game/phase/Combat.java b/src/main/java/forge/game/phase/Combat.java
index 61068cf2f29..075a75fccdf 100644
--- a/src/main/java/forge/game/phase/Combat.java
+++ b/src/main/java/forge/game/phase/Combat.java
@@ -18,10 +18,8 @@
package forge.game.phase;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -65,9 +63,8 @@ public class Combat {
private int nextDefender = 0;
// This Hash keeps track of
- private final HashMap
- * getDeclaredAttackers.
- *
* Setter for the field
- * getTotalDefendingDamage.
- *
* setDefendingDamage.
@@ -369,11 +333,11 @@ public class Combat {
* a {@link forge.Card} object.
*/
public final void addDefendingDamage(final int n, final Card source) {
- final String slot = this.getDefenderByAttacker(source).toString();
- final Object o = this.defenders.get(Integer.parseInt(slot));
+ final int slot = this.getDefenderByAttacker(source);
+ final GameEntity ge = this.defenders.get(slot);
- if (o instanceof Card) {
- final Card pw = (Card) o;
+ if (ge instanceof Card) {
+ final Card pw = (Card) ge;
pw.addAssignedDamage(n, source);
return;
@@ -386,29 +350,6 @@ public class Combat {
}
}
- /**
- *
- * addAttackingDamage.
- *
- * Getter for the field
* sortAttackerByDefender.
@@ -423,8 +364,7 @@ public class Combat {
}
for (final Card atk : this.attackerToDefender.keySet()) {
- final Object o = this.attackerToDefender.get(atk);
- final int i = Integer.parseInt(o.toString());
+ final int i = this.attackerToDefender.get(atk);
attackers[i].add(atk);
}
@@ -457,6 +397,26 @@ public class Combat {
this.attackerToDefender.put(c, this.currentDefender);
}
+ /**
+ *
+ * addAttacker.
+ *
* getDefenderByAttacker.
@@ -466,7 +426,7 @@ public class Combat {
* a {@link forge.Card} object.
* @return a {@link java.lang.Object} object.
*/
- public final Object getDefenderByAttacker(final Card c) {
+ public final Integer getDefenderByAttacker(final Card c) {
return this.attackerToDefender.get(c);
}
@@ -527,7 +487,7 @@ public class Combat {
*/
public final void addBlocker(final Card attacker, final Card blocker) {
this.blocked.add(attacker);
- this.getList(attacker).add(blocker);
+ this.getBlockerList(attacker).add(blocker);
}
/**
@@ -558,10 +518,10 @@ public class Combat {
* @return a {@link forge.CardList} object.
*/
public final CardList getBlockers(final Card attacker) {
- if (this.getList(attacker) == null) {
+ if (this.getBlockerList(attacker) == null) {
return new CardList();
} else {
- return new CardList(this.getList(attacker));
+ return new CardList(this.getBlockerList(attacker));
}
}
@@ -595,7 +555,7 @@ public class Combat {
* a {@link forge.Card} object.
* @return a {@link forge.CardList} object.
*/
- private CardList getList(final Card attacker) {
+ private CardList getBlockerList(final Card attacker) {
return this.map.get(attacker);
}
@@ -616,7 +576,7 @@ public class Combat {
} else { // card is a blocker
for (final Card a : att) {
if (this.getBlockers(a).contains(c)) {
- this.getList(a).remove(c);
+ this.getBlockerList(a).remove(c);
// TODO if Declare Blockers and Declare Blockers (Abilities)
// merge this logic needs to be tweaked
if ((this.getBlockers(a).size() == 0)
@@ -853,9 +813,7 @@ public class Combat {
}
} // for
- // if attacker has no trample, and there's damage left, assign the
- // rest
- // to a random blocker
+ // if attacker has no trample, and there's damage left, assign the rest to a random blocker
if ((damage > 0) && !(c.hasKeyword("Trample") && killsAllBlockers)) {
final int index = CardUtil.getRandomIndex(block);
block.get(index).addAssignedDamage(damage, c);
diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java
index 75917f6afb6..1954b03ad2e 100644
--- a/src/main/java/forge/game/phase/PhaseHandler.java
+++ b/src/main/java/forge/game/phase/PhaseHandler.java
@@ -29,12 +29,12 @@ import forge.Card;
import forge.CardList;
import forge.CardListFilter;
import forge.GameActionUtil;
-import forge.MyObservable;
import forge.Singletons;
import forge.card.trigger.TriggerType;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.properties.ForgePreferences.FPref;
+import forge.util.MyObservable;
/**
*
@@ -343,7 +343,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
break;
case COMBAT_BEGIN:
- PhaseUtil.verifyCombat();
+ //PhaseUtil.verifyCombat();
PhaseUtil.handleCombatBegin();
break;
diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java
index d8f4ee4be60..94160b3cb80 100644
--- a/src/main/java/forge/game/player/ComputerUtil.java
+++ b/src/main/java/forge/game/player/ComputerUtil.java
@@ -1891,4 +1891,74 @@ public class ComputerUtil {
}
return prevented;
}
+
+ /**
+ *
+ * castPermanentInMain1.
+ *
+ * removeFromFrozenStack.
+ *
* setResolving.
diff --git a/src/main/java/forge/game/zone/PlayerZone.java b/src/main/java/forge/game/zone/PlayerZone.java
index 042a952cced..6067fbf6eac 100644
--- a/src/main/java/forge/game/zone/PlayerZone.java
+++ b/src/main/java/forge/game/zone/PlayerZone.java
@@ -19,7 +19,7 @@ package forge.game.zone;
import java.util.Observer;
-import forge.MyObservable;
+import forge.util.MyObservable;
//PlayerZone observers the cards that are added to its zone
/**
diff --git a/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java b/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java
index 3724ea98e93..2f5a598d9c9 100644
--- a/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java
+++ b/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java
@@ -76,7 +76,7 @@ public class PlayerZoneComesIntoPlay extends DefaultPlayerZone {
final Player player = c.getController();
if (this.trigger) {
- if (c.hasKeyword("CARDNAME enters the battlefield tapped.")) {
+ if (c.hasKeyword("CARDNAME enters the battlefield tapped.") || c.hasKeyword("Hideaway")) {
// it enters the battlefield this way, and should not fire
// triggers
c.setTapped(true);
diff --git a/src/main/java/forge/gui/CardDetailPanel.java b/src/main/java/forge/gui/CardDetailPanel.java
index 608ae458f10..051bc6a99d2 100644
--- a/src/main/java/forge/gui/CardDetailPanel.java
+++ b/src/main/java/forge/gui/CardDetailPanel.java
@@ -30,6 +30,7 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
@@ -59,6 +60,7 @@ public class CardDetailPanel extends JPanel implements CardContainer {
private final JLabel idLabel;
private final JLabel setInfoLabel;
private final JTextArea cdArea;
+ private final JScrollPane scrArea;
/**
*
@@ -114,13 +116,15 @@ public class CardDetailPanel extends JPanel implements CardContainer {
this.setInfoLabel.setHorizontalAlignment(SwingConstants.CENTER);
this.cdArea = new JTextArea(4, 12);
- GridBagConstraints areaConstrains = new GridBagConstraints();
- areaConstrains.fill = GridBagConstraints.BOTH;
- areaConstrains.gridx = 0;
- areaConstrains.gridy = 1;
- areaConstrains.weightx = 1.0;
- areaConstrains.weighty = 1.0;
- this.add(new JScrollPane(this.cdArea), areaConstrains);
+ this.scrArea = new JScrollPane(this.cdArea);
+
+ GridBagConstraints areaConstraints = new GridBagConstraints();
+ areaConstraints.fill = GridBagConstraints.BOTH;
+ areaConstraints.gridx = 0;
+ areaConstraints.gridy = 1;
+ areaConstraints.weightx = 1.0;
+ areaConstraints.weighty = 1.0;
+ this.add(scrArea, areaConstraints);
this.cdArea.setLineWrap(true);
this.cdArea.setWrapStyleWord(true);
this.cdArea.setEditable(false);
@@ -465,6 +469,13 @@ public class CardDetailPanel extends JPanel implements CardContainer {
}
this.cdArea.setText(area.toString());
+
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ scrArea.getVerticalScrollBar().setValue(scrArea.getVerticalScrollBar().getMinimum());
+ }
+ });
}
/**
diff --git a/src/main/java/forge/gui/GuiInput.java b/src/main/java/forge/gui/GuiInput.java
index c4a19cc149b..178da6f6b7c 100644
--- a/src/main/java/forge/gui/GuiInput.java
+++ b/src/main/java/forge/gui/GuiInput.java
@@ -22,11 +22,11 @@ import java.util.Observer;
import forge.AllZone;
import forge.Card;
-import forge.MyObservable;
import forge.Singletons;
import forge.control.input.Input;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
+import forge.util.MyObservable;
/**
*
diff --git a/src/main/java/forge/gui/SOverlayUtils.java b/src/main/java/forge/gui/SOverlayUtils.java
index f75d78a7ff5..1eec6a85e87 100644
--- a/src/main/java/forge/gui/SOverlayUtils.java
+++ b/src/main/java/forge/gui/SOverlayUtils.java
@@ -44,10 +44,10 @@ public final class SOverlayUtils {
pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE));
pnl.setBounds(new Rectangle(((w - pnlW) / 2), ((h - pnlH) / 2), pnlW, pnlH));
- pnl.add(new FLabel.Builder().icon(FSkin.getIcon(FSkin.ForgeIcons.ICO_LOGO)).build(),
+ pnl.add(new FLabel.Builder().icon(FSkin.getIcon(FSkin.InterfaceIcons.ICO_LOGO)).build(),
"h 200px!, align center");
pnl.add(new FLabel.Builder().text("Loading new game...")
- .fontScaleAuto(false).fontSize(22).build(), "h 40px!, align center");
+ .fontSize(22).build(), "h 40px!, align center");
overlay.add(pnl);
@@ -75,7 +75,7 @@ public final class SOverlayUtils {
pnlLoading.setBounds(((w - 170) / 2), ((h - 80) / 2), 170, 80);
pnlLoading.setLayout(new MigLayout("wrap, align center"));
pnlLoading.add(new FLabel.Builder().fontSize(18)
- .fontScaleAuto(false).text(msg0).build(), "h 20px!, w 140px!, gap 0 0 5px 0");
+ .text(msg0).build(), "h 20px!, w 140px!, gap 0 0 5px 0");
pnlLoading.add(lblLoading, "gap 0 0 0 10px");
overlay.add(pnlLoading);
diff --git a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java
new file mode 100644
index 00000000000..5fe830b5f6a
--- /dev/null
+++ b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java
@@ -0,0 +1,113 @@
+/*
+ * Forge: Play Magic: the Gathering.
+ * Copyright (C) 2011 Forge Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
- * Gui_DeckEditor class.
- *
- * Gui_DeckEditor class.
- *
- * Gui_Quest_DeckEditor class.
- *
- * setup.
- *
- * DeckEditorDraft class.
- *
- * addListeners.
- *
- * setup.
- *
- * jbInit.
- *
- * jButton1_actionPerformed.
- *
- * showChoices.
- *
- * getPlayersDeck.
- *
- * saveDraft.
- *
- * Gui_DeckEditor_Menu class.
- *
- * getUserInput_GetDeckName.
- *
- * setupSortMenu.
- *
@@ -44,11 +26,11 @@ import forge.util.closures.Predicate;
* @author Forge
* @version $Id$
*/
-public final class MenuCommon extends MenuBase
* exportDeck.
*
* Generate Proxy for a Deck.
*
- * Gui_DeckEditor_Menu class.
- *
- * Gui_Quest_DeckEditor_Menu class.
- *
- * Constructor for Gui_Quest_DeckEditor_Menu.
- *
- * importDeck.
- *
- * getImportFilename.
- *
- * addImportExport.
- * additionalManaCost.
diff --git a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java
index 541f30bd438..3ac6c6a828f 100644
--- a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java
+++ b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java
@@ -148,7 +148,7 @@ public class SpellAbilityRequirements {
}
this.select.resetTargets();
- AllZone.getStack().clearFrozen();
+ AllZone.getStack().removeFromFrozenStack(this.ability);
return;
} else {
this.needPayment();
diff --git a/src/main/java/forge/card/spellability/SpellAbilityRestriction.java b/src/main/java/forge/card/spellability/SpellAbilityRestriction.java
index 61e3944f702..2d64044f490 100644
--- a/src/main/java/forge/card/spellability/SpellAbilityRestriction.java
+++ b/src/main/java/forge/card/spellability/SpellAbilityRestriction.java
@@ -118,7 +118,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
}
if (params.containsKey("ActivationLimit")) {
- this.setActivationLimit(Integer.parseInt(params.get("ActivationLimit")));
+ this.setLimitToCheck(params.get("ActivationLimit"));
}
if (params.containsKey("ActivationNumberSacrifice")) {
@@ -307,8 +307,15 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
return false;
}
- if ((this.getActivationLimit() != -1) && (this.getNumberTurnActivations() >= this.getActivationLimit())) {
- return false;
+ if (this.getLimitToCheck() != null) {
+ String limit = this.getLimitToCheck();
+ int activationLimit = limit.matches("[0-9][0-9]?")
+ ? Integer.parseInt(limit) : AbilityFactory.calculateAmount(c, limit, sa);
+ this.setActivationLimit(activationLimit);
+
+ if ((this.getActivationLimit() != -1) && (this.getNumberTurnActivations() >= this.getActivationLimit())) {
+ return false;
+ }
}
if (this.getCardsInHand() != -1) {
diff --git a/src/main/java/forge/card/spellability/SpellAbilityVariables.java b/src/main/java/forge/card/spellability/SpellAbilityVariables.java
index d2d00dec44c..b1b98eda931 100644
--- a/src/main/java/forge/card/spellability/SpellAbilityVariables.java
+++ b/src/main/java/forge/card/spellability/SpellAbilityVariables.java
@@ -112,6 +112,9 @@ public class SpellAbilityVariables {
/** The activation limit. */
private int activationLimit = -1;
+ /** The limitToCheck to check. */
+ private String limitToCheck = null;
+
/** The number turn activations. */
private int numberTurnActivations = 0;
@@ -633,6 +636,30 @@ public class SpellAbilityVariables {
return this.activationLimit;
}
+ /**
+ * limitToCheck.
+ * limitToCheck.
+ * attackingPlayer.
@@ -280,26 +264,6 @@ public class Combat {
return this.defendingDamageMap;
}
- /**
- * attackingDamage.
- *
(C at beginning of class name denotes a control class.)
+ */
+public enum CDeckEditorUI implements CardContainer {
+ /** */
+ SINGLETON_INSTANCE;
+
+ private ACEditorBase, ?> childController;
+
+ private CDeckEditorUI() {
+ }
+
+ //========== Overridden from CardContainer
+
+ @Override
+ public void setCard(final Card c) {
+ CDetail.SINGLETON_INSTANCE.showCard(c);
+ CPicture.SINGLETON_INSTANCE.showCard(c);
+ }
+
+ @Override
+ public Card getCard() {
+ return CDetail.SINGLETON_INSTANCE.getCurrentCard();
+ }
+
+ //========= Accessor/mutator methods
+ /**
+ * @return ACEditorBase, ?>
+ */
+ public ACEditorBase, ?> getCurrentEditorController() {
+ return childController;
+ }
+
+ /**
+ * Set controller for current configuration of editor.
+ * @param editor0 {@link forge.gui.deckeditor.controllers.ACEditorBase}, ?>
+ */
+ public void setCurrentEditorController(ACEditorBase, ?> editor0) {
+ this.childController = editor0;
+ updateController();
+ }
+
+ //========== Other methods
+ /**
+ * Updates listeners for current controller.
+ */
+ private void updateController() {
+ childController.getTableCatalog().getTable().addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyPressed(final KeyEvent e) {
+ if (e.getKeyChar() == ' ') { childController.addCard(); }
+ }
+ });
+
+ childController.getTableDeck().getTable().addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyPressed(final KeyEvent e) {
+ if (e.getKeyChar() == ' ') { childController.removeCard(); }
+ }
+ });
+
+ childController.getTableCatalog().getTable().addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(final MouseEvent e) {
+ if (e.getClickCount() == 2) { childController.addCard(); }
+ }
+ });
+
+ childController.getTableDeck().getTable().addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(final MouseEvent e) {
+ if (e.getClickCount() == 2) { childController.removeCard(); }
+ }
+ });
+
+ childController.init();
+ }
+}
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java b/src/main/java/forge/gui/deckeditor/DeckEditorBase.java
deleted file mode 100644
index e2e586975e3..00000000000
--- a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Forge: Play Magic: the Gathering.
- * Copyright (C) 2011 Forge Team
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see serialVersionUID=130339644136746796L. */
- private static final long serialVersionUID = 130339644136746796L;
-
- private final JButton removeButton = new JButton();
- private final JButton addButton = new JButton();
- private final JButton importButton = new JButton();
-
- private final JButton analysisButton = new JButton();
- private final JButton clearFilterButton = new JButton();
-
- private final JLabel jLabelAnalysisGap = new JLabel("");
- private FilterNameTypeSetPanel filterNameTypeSet;
-
- private final DeckControllerserialVersionUID=130339644136746796L. */
- private static final long serialVersionUID = 130339644136746796L;
-
- private final JButton removeButton = new JButton();
- private final JButton addButton = new JButton();
-
- private final JButton analysisButton = new JButton();
- private final JButton clearFilterButton = new JButton();
-
- private final JLabel jLabelAnalysisGap = new JLabel("");
- private FilterNameTypeSetPanel filterNameTypeSet;
-
- private final DeckControllerserialVersionUID=152061168634545L. */
- private static final long serialVersionUID = 152061168634545L;
-
- /** The custom menu. */
- private final JButton clearFilterButton = new JButton();
- private final JButton addButton = new JButton();
- private final JButton removeButton = new JButton();
- private final JLabel jLabelAnalysisGap = new JLabel("");
- private final JButton analysisButton = new JButton();
-
- private FilterNameTypeSetPanel filterNameTypeSet;
-
- private final QuestController questData;
- private final DeckControllerserialVersionUID=-6055633915602448260L.
- */
- private static final long serialVersionUID = -6055633915602448260L;
-
- private IBoosterDraft boosterDraft;
-
- private final JButton jButtonPick = new JButton();
-
- private CardPanelLite cardView = new CardPanelLite();
-
- private final MouseListener pickWithMouse = new MouseAdapter() {
- @Override
- public void mouseClicked(final MouseEvent e) {
- // Pick on left-button double click
- if (((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) && (e.getClickCount() == 2)) {
- DraftingProcess.this.jButtonPickClicked(null);
- } else if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) {
- // pick on right click
- final JTable table = DraftingProcess.this.getTopTableWithCards().getTable();
- final int rowNumber = table.rowAtPoint(e.getPoint());
- // after hittest - if it was outside of rows - discard this
- // click
- if (rowNumber == -1) {
- return;
- }
-
- // if row was not selected, select it. If it was, pick a card
- if (rowNumber != table.getSelectedRow()) {
- table.getSelectionModel().setSelectionInterval(rowNumber, rowNumber);
- } else {
- DraftingProcess.this.jButtonPickClicked(null);
- }
- }
- }
- };
-
- /**
- * Show gui.
- *
- * @param inBoosterDraft
- * the in_booster draft
- */
- public final void showGui(final IBoosterDraft inBoosterDraft) {
- this.boosterDraft = inBoosterDraft;
- this.show(null);
- }
-
- /**
- * serialVersionUID=-4037993759604768755L. */
+ /** Constant serialVersionUID=-4037993759604768755L. *
private static final long serialVersionUID = -4037993759604768755L;
- /** Constant previousDirectory. */
+ /** Constant previousDirectory. *
private static File previousDirectory = null;
/**
@@ -58,7 +40,7 @@ public final class MenuCommon extends MenuBaseserialVersionUID=-4037993759604768755L. */
- private static final long serialVersionUID = -4037993759604768755L;
-
- /**
- * Menu for Deck Editor.
- *
- * @param ctrl the ctrl
- * @param exit a Command
- */
- public MenuLimited(final DeckControllerserialVersionUID=-4052319220021158574L. */
- private static final long serialVersionUID = -4052319220021158574L;
-
- // used for import and export, try to made the gui user friendly
- /** Constant previousDirectory. */
- private static File previousDirectory = null;
-
- /**
- *