From ff73eb78ebec98ebe167da8ca350ca8968b0839c Mon Sep 17 00:00:00 2001 From: Sol Date: Tue, 29 Dec 2015 16:37:22 +0000 Subject: [PATCH] - Synchronize nomenclature of Generic Cost - Add new Colorless Cost - Start displaying of colorless mana with new symbol (with backwards compatibility for existing scripts that produce "{1}" instead of "{C}") --- .../src/main/java/forge/ai/AiController.java | 4 +- .../main/java/forge/ai/ComputerUtilMana.java | 28 ++++----- .../java/forge/ai/PlayerControllerAi.java | 4 +- .../src/main/java/forge/card/CardRules.java | 12 ++-- .../java/forge/card/CardRulesPredicates.java | 4 +- .../java/forge/card/mana/IParserManaCost.java | 8 +-- .../main/java/forge/card/mana/ManaAtom.java | 8 ++- .../main/java/forge/card/mana/ManaCost.java | 13 ++-- .../java/forge/card/mana/ManaCostParser.java | 14 ++--- .../java/forge/card/mana/ManaCostShard.java | 34 ++++++----- .../main/java/forge/game/GameActionUtil.java | 2 +- .../java/forge/game/ability/AbilityUtils.java | 4 +- .../java/forge/game/card/CardFactoryUtil.java | 2 +- .../main/java/forge/game/card/CardUtil.java | 6 +- .../src/main/java/forge/game/cost/Cost.java | 5 +- .../forge/game/mana/ManaCostAdjustment.java | 14 ++--- .../forge/game/mana/ManaCostBeingPaid.java | 61 ++++++++----------- .../forge/game/player/PlayerController.java | 2 +- .../StaticAbilityContinuous.java | 1 + .../itemmanager/views/ColorSetRenderer.java | 2 +- .../itemmanager/views/ManaCostRenderer.java | 2 +- .../java/forge/toolbox/CardFaceSymbols.java | 1 + .../src/test/java/forge/RunTest.java | 2 +- .../util/PlayerControllerForTests.java | 2 +- .../filters/CardColorlessCostFilter.java | 4 +- .../src/main/java/forge/assets/FSkinProp.java | 2 +- .../main/java/forge/card/CardDetailUtil.java | 2 +- .../src/main/java/forge/deck/DeckProxy.java | 2 +- .../java/forge/match/input/InputPayMana.java | 10 +-- .../input/InputSelectCardsForConvoke.java | 2 +- .../forge/player/PlayerControllerHuman.java | 6 +- 31 files changed, 129 insertions(+), 134 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 4f28f2bd5c4..86abc39237e 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1297,9 +1297,9 @@ public class AiController { return null; } - public CardCollection chooseCardsToDelve(int colorlessCost, CardCollection grave) { + public CardCollection chooseCardsToDelve(int genericCost, CardCollection grave) { CardCollection toExile = new CardCollection(); - int numToExile = Math.min(grave.size(), colorlessCost); + int numToExile = Math.min(grave.size(), genericCost); for (int i = 0; i < numToExile; i++) { Card chosen = null; diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index 435b22b7647..79d9a035371 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -348,7 +348,7 @@ public class ComputerUtilMana { Collection saList = null; if (hasConverge && - (toPay == ManaCostShard.COLORLESS || toPay == ManaCostShard.X)) { + (toPay == ManaCostShard.GENERIC || toPay == ManaCostShard.X)) { final int unpaidColors = cost.getUnpaidColors() + cost.getColorsPaid() ^ ManaCostShard.COLORS_SUPERPOSITION; for (final byte b : ColorSet.fromMask(unpaidColors)) { // try and pay other colors for converge final ManaCostShard shard = ManaCostShard.valueOf(b); @@ -358,7 +358,7 @@ public class ComputerUtilMana { break; } } - if (saList == null || saList.isEmpty()) { // failed to converge, revert to paying colorless + if (saList == null || saList.isEmpty()) { // failed to converge, revert to paying generic saList = sourcesForShards.get(toPay); hasConverge = false; } @@ -666,7 +666,7 @@ public class ComputerUtilMana { } else if (m.isAnyMana()) { byte colorChoice = 0; - if (toPay.isOr2Colorless()) + if (toPay.isOr2Generic()) colorChoice = toPay.getColorMask(); else { for (byte c : MagicColor.WUBRG) { @@ -775,7 +775,7 @@ public class ComputerUtilMana { // * Pay 2/C with matching colors // * pay hybrids // * pay phyrexian, keep mana for colorless - // * pay colorless + // * pay generic return cost.getShardToPayByPriority(cost.getDistinctShards(), ColorSet.ALL_COLORS.getColor()); } @@ -786,10 +786,10 @@ public class ComputerUtilMana { byte mask = MagicColor.fromName(manaPart); // make mana mandatory for AI - if (!cost.needsColor(mask, ai.getManaPool()) && cost.getColorlessManaAmount() > 0) { + if (!cost.needsColor(mask, ai.getManaPool()) && cost.getGenericManaAmount() > 0) { ManaCostShard shard = ManaCostShard.valueOf(mask); cost.increaseShard(shard, 1); - cost.decreaseColorlessMana(1); + cost.decreaseGenericMana(1); } } } @@ -909,8 +909,8 @@ public class ComputerUtilMana { final ManaCostBeingPaid cost) { ListMultimap res = ArrayListMultimap.create(); - if (cost.getColorlessManaAmount() > 0 && manaAbilityMap.containsKey(ManaAtom.COLORLESS)) { - res.putAll(ManaCostShard.COLORLESS, manaAbilityMap.get(ManaAtom.COLORLESS)); + if (cost.getGenericManaAmount() > 0 && manaAbilityMap.containsKey(ManaAtom.GENERIC)) { + res.putAll(ManaCostShard.GENERIC, manaAbilityMap.get(ManaAtom.GENERIC)); } // loop over cost parts @@ -923,16 +923,16 @@ public class ComputerUtilMana { continue; } - if (shard.isOr2Colorless()) { + if (shard.isOr2Generic()) { Integer colorKey = (int) shard.getColorMask(); if (manaAbilityMap.containsKey(colorKey)) res.putAll(shard, manaAbilityMap.get(colorKey)); - if (manaAbilityMap.containsKey(ManaAtom.COLORLESS)) - res.putAll(shard, manaAbilityMap.get(ManaAtom.COLORLESS)); + if (manaAbilityMap.containsKey(ManaAtom.GENERIC)) + res.putAll(shard, manaAbilityMap.get(ManaAtom.GENERIC)); continue; } - if (shard == ManaCostShard.COLORLESS) { + if (shard == ManaCostShard.GENERIC) { continue; } @@ -1176,7 +1176,7 @@ public class ComputerUtilMana { } } - manaMap.get(ManaAtom.COLORLESS).add(manaMap.get(ManaAtom.COLORLESS).size(), m); // add to colorless source list + manaMap.get(ManaAtom.GENERIC).add(manaMap.get(ManaAtom.GENERIC).size(), m); // add to generic source list AbilityManaPart mp = m.getManaPart(); // setup produce mana replacement effects @@ -1314,7 +1314,7 @@ public class ComputerUtilMana { convoked = null; } for (int i = 0; i < list.size() && i < cost.getGenericCost(); i++) { - convoke.put(list.get(i), ManaCostShard.COLORLESS); + convoke.put(list.get(i), ManaCostShard.GENERIC); } return convoke; } diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 905843b62a8..c428454a1b9 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -320,8 +320,8 @@ public class PlayerControllerAi extends PlayerController { } @Override - public CardCollectionView chooseCardsToDelve(int colorlessCost, CardCollection grave) { - return getAi().chooseCardsToDelve(colorlessCost, grave); + public CardCollectionView chooseCardsToDelve(int genericAmount, CardCollection grave) { + return getAi().chooseCardsToDelve(genericAmount, grave); } @Override diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index 2f419fbdd44..f49b5bdb584 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -427,19 +427,19 @@ public final class CardRules implements ICardCharacteristics { */ private static class ManaCostParser implements IParserManaCost { private final StringTokenizer st; - private int colorlessCost; + private int genericCost; public ManaCostParser(final String cost) { st = new StringTokenizer(cost, " "); - this.colorlessCost = 0; + this.genericCost = 0; } @Override - public final int getTotalColorlessCost() { + public final int getTotalGenericCost() { if (this.hasNext()) { - throw new RuntimeException("Colorless cost should be obtained after iteration is complete"); + throw new RuntimeException("Generic cost should be obtained after iteration is complete"); } - return this.colorlessCost; + return this.genericCost; } /* @@ -463,7 +463,7 @@ public final class CardRules implements ICardCharacteristics { // System.out.println(unparsed); try { int iVal = Integer.parseInt(unparsed); - this.colorlessCost += iVal; + this.genericCost += iVal; return null; } catch (NumberFormatException nex) { } diff --git a/forge-core/src/main/java/forge/card/CardRulesPredicates.java b/forge-core/src/main/java/forge/card/CardRulesPredicates.java index 7185e72ccbe..6f2cc317cdf 100644 --- a/forge-core/src/main/java/forge/card/CardRulesPredicates.java +++ b/forge-core/src/main/java/forge/card/CardRulesPredicates.java @@ -394,7 +394,7 @@ public final class CardRulesPredicates { public static class LeafNumber implements Predicate { public enum CardField { - CMC, COLORLESS_COST, POWER, TOUGHNESS + CMC, GENERIC_COST, POWER, TOUGHNESS } private final LeafNumber.CardField field; @@ -413,7 +413,7 @@ public final class CardRulesPredicates { switch (this.field) { case CMC: return this.op(card.getManaCost().getCMC(), this.operand); - case COLORLESS_COST: + case GENERIC_COST: return this.op(card.getManaCost().getGenericCost(), this.operand); case POWER: value = card.getIntPower(); diff --git a/forge-core/src/main/java/forge/card/mana/IParserManaCost.java b/forge-core/src/main/java/forge/card/mana/IParserManaCost.java index 301f410a5a7..f28bf74a249 100644 --- a/forge-core/src/main/java/forge/card/mana/IParserManaCost.java +++ b/forge-core/src/main/java/forge/card/mana/IParserManaCost.java @@ -7,11 +7,5 @@ import java.util.Iterator; * The Interface ManaParser. */ public interface IParserManaCost extends Iterator { - - /** - * Gets the total colorless cost. - * - * @return the total colorless cost - */ - int getTotalColorlessCost(); + int getTotalGenericCost(); } diff --git a/forge-core/src/main/java/forge/card/mana/ManaAtom.java b/forge-core/src/main/java/forge/card/mana/ManaAtom.java index 3a645e0aea4..68c7306d94e 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaAtom.java +++ b/forge-core/src/main/java/forge/card/mana/ManaAtom.java @@ -4,7 +4,7 @@ import forge.card.MagicColor; /** A bitmask to represent any mana symbol as an integer. */ public abstract class ManaAtom { - public static final int COLORLESS = 1 << 6; + public static final int GENERIC = 1 << 6; /** The Constant WHITE. */ public static final int WHITE = MagicColor.WHITE; @@ -24,12 +24,14 @@ public abstract class ManaAtom { /** The Constant IS_X. */ public static final int IS_X = 1 << 8; - /** The Constant OR_2_COLORLESS. */ - public static final int OR_2_COLORLESS = 1 << 9; + /** The Constant OR_2_GENERIC. */ + public static final int OR_2_GENERIC = 1 << 9; /** The Constant OR_2_LIFE. */ public static final int OR_2_LIFE = 1 << 10; /** The Constant IS_SNOW. */ public static final int IS_SNOW = 1 << 11; + + public static final int COLORLESS = 1 << 12; } \ No newline at end of file diff --git a/forge-core/src/main/java/forge/card/mana/ManaCost.java b/forge-core/src/main/java/forge/card/mana/ManaCost.java index a59c7bf3c14..a21050b7f90 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaCost.java +++ b/forge-core/src/main/java/forge/card/mana/ManaCost.java @@ -48,7 +48,6 @@ public final class ManaCost implements Comparable, Iterable, Iterable 0 ? new ManaCost(cntColorless) : NO_COST; + return cntGeneric > 0 ? new ManaCost(cntGeneric) : NO_COST; } // pass mana cost parser here @@ -91,11 +90,11 @@ public final class ManaCost implements Comparable, Iterable, Iterable= '0') { - atoms |= ManaAtom.COLORLESS; + atoms |= ManaAtom.GENERIC; } break; } } // for cases when unparsed equals '2' or unparsed is like '12' or '20' - if (atoms == ManaAtom.OR_2_COLORLESS || atoms == (ManaAtom.OR_2_COLORLESS | ManaAtom.COLORLESS)) { - atoms = ManaAtom.COLORLESS; + if (atoms == ManaAtom.OR_2_GENERIC || atoms == (ManaAtom.OR_2_GENERIC | ManaAtom.GENERIC)) { + atoms = ManaAtom.GENERIC; } return ManaCostShard.valueOf(atoms); } @@ -282,11 +284,11 @@ public enum ManaCostShard { return BinaryUtil.bitCount(this.shard & COLORS_SUPERPOSITION) == 1; } - public boolean isOr2Colorless() { - return (this.shard & ManaAtom.OR_2_COLORLESS) != 0; + public boolean isOr2Generic() { + return (this.shard & ManaAtom.OR_2_GENERIC) != 0; } public boolean canBePaidWithManaOfColor(byte colorCode) { - return this.isOr2Colorless() || (COLORS_SUPERPOSITION & this.shard) == 0 || (colorCode & this.shard) > 0; + return this.isOr2Generic() || (COLORS_SUPERPOSITION & this.shard) == 0 || (colorCode & this.shard) > 0; } } diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index 6621ceac50f..918f21086d4 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -255,7 +255,7 @@ public final class GameActionUtil { final SpellAbility newSA = sa.copy(); newSA.setBasicSpell(false); ManaCostBeingPaid newCost = new ManaCostBeingPaid(source.getManaCost()); - newCost.increaseColorlessMana(2); + newCost.increaseGenericMana(2); final Cost actualcost = new Cost(newCost.toManaCost(), false); newSA.setPayCosts(actualcost); SpellAbilityRestriction sar = new SpellAbilityRestriction(); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index a93f82eb467..9014b0fc51b 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1285,7 +1285,7 @@ public class AbilityUtils { int xPaid = triggeredCard.getXManaCostPaid() * xCount; ManaCostBeingPaid toPay = new ManaCostBeingPaid(triggeredCard.getManaCost()); toPay.decreaseShard(ManaCostShard.X, xCount); - toPay.increaseColorlessMana(xPaid); + toPay.increaseGenericMana(xPaid); cost = new Cost(toPay.toManaCost(), true); } } @@ -1305,7 +1305,7 @@ public class AbilityUtils { return; } ManaCostBeingPaid newCost = new ManaCostBeingPaid(rememberedCard.getManaCost()); - newCost.decreaseColorlessMana(2); + newCost.decreaseGenericMana(2); cost = new Cost(newCost.toManaCost(), true); } else if (!StringUtils.isBlank(sa.getSVar(unlessCost)) || !StringUtils.isBlank(source.getSVar(unlessCost))) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index daf61155b69..3b307295f35 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -438,7 +438,7 @@ public class CardFactoryUtil { final StringBuilder sb = new StringBuilder(); if (Character.isDigit(tokenized[0].charAt(0))) { - // cost starts with "colorless" number cost + // cost starts with "generic" number cost int cost = Integer.parseInt(tokenized[0]); cost = multiplier * cost; tokenized[0] = "" + cost; diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index 77c490d1833..b3c354c01e1 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -407,7 +407,8 @@ public final class CardUtil { colors.add(col); } } - if (maxChoices == 6 && producedColors.contains("1")) { + // TODO Sol Remove production of "1" Generic Mana + if (maxChoices == 6 && (producedColors.contains("1") || producedColors.contains("C"))) { colors.add(MagicColor.Constant.COLORLESS); } } else if (reflectProperty.equals("Produce")) { @@ -461,7 +462,8 @@ public final class CardUtil { } } - if (maxChoices == 6 && ab.canProduce("1")) { + // TODO Sol Remove production of "1" Generic Mana + if (maxChoices == 6 && (ab.canProduce("1") || ab.canProduce("C"))) { colors.add(MagicColor.Constant.COLORLESS); } diff --git a/forge-game/src/main/java/forge/game/cost/Cost.java b/forge-game/src/main/java/forge/game/cost/Cost.java index 9e027a192f9..a4f9c846c78 100644 --- a/forge-game/src/main/java/forge/game/cost/Cost.java +++ b/forge-game/src/main/java/forge/game/cost/Cost.java @@ -114,13 +114,14 @@ public class Cost { return manapart == null ? ManaCost.ZERO : manapart.getManaToPay(); } - private Cost(int colorlessmana) { - costParts.add(new CostPartMana(ManaCost.get(colorlessmana), null)); + private Cost(int genericMana) { + costParts.add(new CostPartMana(ManaCost.get(genericMana), null)); } // Parsing Strings public Cost(ManaCost cost, final boolean bAbility) { + this.isAbility = bAbility; costParts.add(new CostPartMana(cost, null)); } diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java index 88309083876..a503c39ca22 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java @@ -94,9 +94,9 @@ public class ManaCostAdjustment { sa.getHostCard().clearDelved(); final Player pc = sa.getActivatingPlayer(); final CardCollection mutableGrave = new CardCollection(pc.getCardsIn(ZoneType.Graveyard)); - final CardCollectionView toExile = pc.getController().chooseCardsToDelve(cost.getUnpaidShards(ManaCostShard.COLORLESS), mutableGrave); + final CardCollectionView toExile = pc.getController().chooseCardsToDelve(cost.getUnpaidShards(ManaCostShard.GENERIC), mutableGrave); for (final Card c : toExile) { - cost.decreaseColorlessMana(1); + cost.decreaseGenericMana(1); if (cardsToDelveOut != null) { cardsToDelveOut.add(c); } else if (!test) { @@ -328,15 +328,15 @@ public class ManaCostAdjustment { } if (!params.containsKey("Color")) { - manaCost.increaseColorlessMana(value); + manaCost.increaseGenericMana(value); if (manaCost.toString().equals("{0}") && params.containsKey("MinMana")) { - manaCost.increaseColorlessMana(Integer.valueOf(params.get("MinMana"))); + manaCost.increaseGenericMana(Integer.valueOf(params.get("MinMana"))); } } else { final String color = params.get("Color"); for (final String cost : color.split(" ")) { if (StringUtils.isNumeric(cost)) { - manaCost.increaseColorlessMana(Integer.parseInt(cost) * value); + manaCost.increaseGenericMana(Integer.parseInt(cost) * value); } else { manaCost.increaseShard(ManaCostShard.parseNonGeneric(cost), value); } @@ -463,13 +463,13 @@ public class ManaCostAdjustment { final int maxReduction = Math.max(0, manaCost.getConvertedManaCost() - minMana); if (maxReduction > 0) { - manaCost.decreaseColorlessMana(Math.min(value, maxReduction)); + manaCost.decreaseGenericMana(Math.min(value, maxReduction)); } } else { final String color = params.get("Color"); for (final String cost : color.split(" ")) { if (StringUtils.isNumeric(cost)) { - manaCost.decreaseColorlessMana(Integer.parseInt(cost) * value); + manaCost.decreaseGenericMana(Integer.parseInt(cost) * value); } else { manaCost.decreaseShard(ManaCostShard.parseNonGeneric(cost), value); } diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java index c454c9a3777..aa6ada3541d 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java @@ -80,16 +80,16 @@ public class ManaCostBeingPaid { if (!mch.hasNext()) { return false; } nextShard = mch.next(); - if (nextShard == ManaCostShard.COLORLESS) { - return this.hasNext(); // skip colorless + if (nextShard == ManaCostShard.GENERIC) { + return this.hasNext(); // skip generic } remainingShards = unpaidShards.get(nextShard).totalCount; return true; } @Override - public int getTotalColorlessCost() { - ShardCount c = unpaidShards.get(ManaCostShard.COLORLESS); + public int getTotalGenericCost() { + ShardCount c = unpaidShards.get(ManaCostShard.GENERIC); return c == null ? 0 : c.totalCount; } } @@ -107,7 +107,7 @@ public class ManaCostBeingPaid { } // holds Mana_Part objects - // ManaPartColor is stored before ManaPartColorless + // ManaPartColor is stored before ManaPartGeneric private final Map unpaidShards = new HashMap(); private Map xManaCostPaidByColor; private final String sourceRestriction; @@ -145,7 +145,7 @@ public class ManaCostBeingPaid { increaseShard(shard, 1, false); } } - increaseColorlessMana(manaCost.getGenericCost()); + increaseGenericMana(manaCost.getGenericCost()); } public Map getXManaCostPaidByColor() { @@ -190,10 +190,10 @@ public class ManaCostBeingPaid { // Easier for split costs public final boolean needsColor(final byte colorMask, final ManaPool pool) { for (ManaCostShard shard : unpaidShards.keySet()) { - if (shard == ManaCostShard.COLORLESS) { + if (shard == ManaCostShard.GENERIC) { continue; } - if (shard.isOr2Colorless()) { + if (shard.isOr2Generic()) { if ((shard.getColorMask() & colorMask) != 0) { return true; } @@ -234,7 +234,7 @@ public class ManaCostBeingPaid { ManaCostShard shard; if (StringUtils.isEmpty(xColor)) { - shard = ManaCostShard.COLORLESS; + shard = ManaCostShard.GENERIC; } else { shard = ManaCostShard.valueOf(MagicColor.fromName(xColor)); @@ -242,8 +242,8 @@ public class ManaCostBeingPaid { increaseShard(shard, xCost, true); } - public final void increaseColorlessMana(final int toAdd) { - increaseShard(ManaCostShard.COLORLESS, toAdd, false); + public final void increaseGenericMana(final int toAdd) { + increaseShard(ManaCostShard.GENERIC, toAdd, false); } public final void increaseShard(final ManaCostShard shard, final int toAdd) { increaseShard(shard, toAdd, false); @@ -262,8 +262,8 @@ public class ManaCostBeingPaid { sc.totalCount += toAdd; } - public final void decreaseColorlessMana(final int manaToSubtract) { - decreaseShard(ManaCostShard.COLORLESS, manaToSubtract); + public final void decreaseGenericMana(final int manaToSubtract) { + decreaseShard(ManaCostShard.GENERIC, manaToSubtract); } public final void decreaseShard(final ManaCostShard shard, final int manaToSubtract) { @@ -289,8 +289,8 @@ public class ManaCostBeingPaid { } } - public final int getColorlessManaAmount() { - ShardCount sc = unpaidShards.get(ManaCostShard.COLORLESS); + public final int getGenericManaAmount() { + ShardCount sc = unpaidShards.get(ManaCostShard.GENERIC); if (sc != null) { return sc.totalCount; } @@ -402,8 +402,8 @@ public class ManaCostBeingPaid { } decreaseShard(chosenShard, 1); - if (chosenShard.isOr2Colorless() && ( 0 == (chosenShard.getColorMask() & possibleUses) )) { - this.increaseColorlessMana(1); + if (chosenShard.isOr2Generic() && ( 0 == (chosenShard.getColorMask() & possibleUses) )) { + this.increaseGenericMana(1); } this.sunburstMap |= colorMask; @@ -411,12 +411,12 @@ public class ManaCostBeingPaid { } private static int getPayPriority(final ManaCostShard bill, final byte paymentColor) { - if (bill == ManaCostShard.COLORLESS) { + if (bill == ManaCostShard.GENERIC) { return 0; } if (bill.isMonoColor()) { - if (bill.isOr2Colorless()) { + if (bill.isOr2Generic()) { return !ColorSet.fromMask(bill.getColorMask() & paymentColor).isColorless() ? 9 : 4; } if (!bill.isPhyrexian()) { @@ -445,7 +445,7 @@ public class ManaCostBeingPaid { increaseShard(shard, 1, false); } } - increaseColorlessMana(extra.getGenericCost()); + increaseGenericMana(extra.getGenericCost()); } public final void subtractManaCost(final ManaCost subThisManaCost) { @@ -457,10 +457,10 @@ public class ManaCostBeingPaid { decreaseShard(shard, 1); } else { - decreaseColorlessMana(1); + decreaseGenericMana(1); } } - decreaseColorlessMana(subThisManaCost.getGenericCost()); + decreaseGenericMana(subThisManaCost.getGenericCost()); } /** @@ -480,12 +480,12 @@ public class ManaCostBeingPaid { } } - int nGeneric = getColorlessManaAmount(); + int nGeneric = getGenericManaAmount(); if (nGeneric > 0) { if (nGeneric <= 20) { sb.append("{" + nGeneric + "}"); } - else { //if no mana symbol exists for colorless amount, use combination of symbols for each digit + else { //if no mana symbol exists for generic amount, use combination of symbols for each digit String genericStr = String.valueOf(nGeneric); for (int i = 0; i < genericStr.length(); i++) { sb.append("{" + genericStr.charAt(i) + "}"); @@ -497,7 +497,7 @@ public class ManaCostBeingPaid { List shards = new ArrayList(unpaidShards.keySet()); Collections.sort(shards); for (ManaCostShard shard : shards) { - if (shard == ManaCostShard.COLORLESS) { + if (shard == ManaCostShard.GENERIC) { continue; } @@ -554,15 +554,8 @@ public class ManaCostBeingPaid { return result; } - /** - *

- * removeColorlessMana. - *

- * - * @since 1.0.15 - */ - public final void removeColorlessMana() { - unpaidShards.remove(ManaCostShard.COLORLESS); + public final void removeGenericMana() { + unpaidShards.remove(ManaCostShard.GENERIC); } public String getSourceRestriction() { diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index d69e818d84e..08840cc3edc 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -152,7 +152,7 @@ public abstract class PlayerController { public abstract CardCollectionView chooseCardsToDiscardFrom(Player playerDiscard, SpellAbility sa, CardCollection validCards, int min, int max); public abstract void playMiracle(SpellAbility miracle, Card card); - public abstract CardCollectionView chooseCardsToDelve(int colorLessAmount, CardCollection grave); + public abstract CardCollectionView chooseCardsToDelve(int genericAmount, CardCollection grave); public abstract CardCollectionView chooseCardsToRevealFromHand(int min, int max, CardCollectionView valid); public abstract CardCollectionView chooseCardsToDiscardUnlessType(int min, CardCollectionView hand, String param, SpellAbility sa); public abstract List chooseSaToActivateFromOpeningHand(List usableFromOpeningHand); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index 1e466ed4316..d316ffb4be3 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -521,6 +521,7 @@ public final class StaticAbilityContinuous { sb.append(generic); } for (ManaCostShard s : affectedCard.getManaCost()) { + // TODO Sol Investigate, this loop feels wrong ColorSet cs = ColorSet.fromMask(s.getColorMask()); if(cs.isColorless()) continue; sb.append(' '); diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java index 3ddef558309..93c3f210355 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ColorSetRenderer.java @@ -56,7 +56,7 @@ public class ColorSetRenderer extends ItemCellRenderer { final int offsetIfNoSpace = cntGlyphs > 1 ? (cellWidth - padding0 - elemtWidth) / (cntGlyphs - 1) : elemtWidth + elemtGap; final int dx = Math.min(elemtWidth + elemtGap, offsetIfNoSpace); - // Display colorless mana before colored mana + // Display generic mana before colored mana if (cntGlyphs == 0) { CardFaceSymbols.drawSymbol(ManaCostShard.X.getImageKey(), g, x, y); x += dx; diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ManaCostRenderer.java b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ManaCostRenderer.java index 513b5bfe0c0..1340168a118 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ManaCostRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ManaCostRenderer.java @@ -116,7 +116,7 @@ public class ManaCostRenderer extends ItemCellRenderer { } } - // Display colorless mana before colored mana + // Display generic mana before colored mana if (hasGeneric) { final String sGeneric = Integer.toString(genericManaCost); CardFaceSymbols.drawSymbol(sGeneric, g, x, y); diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java index 4fb19d1e4b3..f5ab22d1e22 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java @@ -55,6 +55,7 @@ public class CardFaceSymbols { MANA_IMAGES.put("X", FSkin.getImage(FSkinProp.IMG_MANA_X, manaImageSize, manaImageSize)); MANA_IMAGES.put("Y", FSkin.getImage(FSkinProp.IMG_MANA_Y, manaImageSize, manaImageSize)); MANA_IMAGES.put("Z", FSkin.getImage(FSkinProp.IMG_MANA_Z, manaImageSize, manaImageSize)); + MANA_IMAGES.put("C", FSkin.getImage(FSkinProp.IMG_MANA_COLORLESS, manaImageSize, manaImageSize)); MANA_IMAGES.put("B", FSkin.getImage(FSkinProp.IMG_MANA_B, manaImageSize, manaImageSize)); MANA_IMAGES.put("BG", FSkin.getImage(FSkinProp.IMG_MANA_HYBRID_BG, manaImageSize, manaImageSize)); diff --git a/forge-gui-desktop/src/test/java/forge/RunTest.java b/forge-gui-desktop/src/test/java/forge/RunTest.java index 828340d9ab8..ea75106a89d 100644 --- a/forge-gui-desktop/src/test/java/forge/RunTest.java +++ b/forge-gui-desktop/src/test/java/forge/RunTest.java @@ -62,7 +62,7 @@ public class RunTest { this.check("24", !manaCost.isPaid()); manaCost.payMana(MagicColor.Constant.BLUE); this.check("25", !manaCost.isPaid()); - manaCost.payMana(MagicColor.Constant.COLORLESS); + manaCost.payMana(MagicColor.Constant.GENERIC); this.check("26", !manaCost.isPaid()); manaCost.payMana(MagicColor.Constant.GREEN); this.check("27", !manaCost.isPaid()); diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index d3b17faeada..299fe195f76 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -273,7 +273,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public CardCollectionView chooseCardsToDelve(int colorLessAmount, CardCollection grave) { + public CardCollectionView chooseCardsToDelve(int genericAmount, CardCollection grave) { return CardCollection.EMPTY; } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/CardColorlessCostFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/CardColorlessCostFilter.java index 91e7cca75fd..4e049ae3932 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/CardColorlessCostFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/CardColorlessCostFilter.java @@ -21,12 +21,12 @@ public class CardColorlessCostFilter extends ValueRangeFilter { @Override protected String getCaption() { - return "Colorless Cost"; + return "Generic Cost"; } @Override protected Predicate buildPredicate() { - Predicate predicate = getCardRulesFieldPredicate(CardRulesPredicates.LeafNumber.CardField.COLORLESS_COST); + Predicate predicate = getCardRulesFieldPredicate(CardRulesPredicates.LeafNumber.CardField.GENERIC_COST); if (predicate == null) { return Predicates.alwaysTrue(); } diff --git a/forge-gui/src/main/java/forge/assets/FSkinProp.java b/forge-gui/src/main/java/forge/assets/FSkinProp.java index 242d4638120..3da982af8b4 100644 --- a/forge-gui/src/main/java/forge/assets/FSkinProp.java +++ b/forge-gui/src/main/java/forge/assets/FSkinProp.java @@ -82,7 +82,7 @@ public enum FSkinProp { IMG_MANA_PHRYX_B (new int[] {320, 360, 40, 40}, PropType.IMAGE), IMG_MANA_SNOW (new int[] {320, 160, 40, 40}, PropType.IMAGE), - //colorless mana images + //generic mana images IMG_MANA_0 (new int[] {640, 200, 20, 20}, PropType.IMAGE), IMG_MANA_1 (new int[] {660, 200, 20, 20}, PropType.IMAGE), IMG_MANA_2 (new int[] {640, 220, 20, 20}, PropType.IMAGE), diff --git a/forge-gui/src/main/java/forge/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/card/CardDetailUtil.java index a23d71deab1..031a29b477b 100644 --- a/forge-gui/src/main/java/forge/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/card/CardDetailUtil.java @@ -169,7 +169,7 @@ public class CardDetailUtil { if (curColors.hasGreen()) { strCurColors += "{G}"; } if (strCurColors.isEmpty()) { - strCurColors = "{X} (colorless)"; + strCurColors = "{C}"; } return strCurColors; diff --git a/forge-gui/src/main/java/forge/deck/DeckProxy.java b/forge-gui/src/main/java/forge/deck/DeckProxy.java index 89df206d80a..d68d9c122d2 100644 --- a/forge-gui/src/main/java/forge/deck/DeckProxy.java +++ b/forge-gui/src/main/java/forge/deck/DeckProxy.java @@ -168,7 +168,7 @@ public class DeckProxy implements InventoryItem { else { for (final ManaCostShard shard : rules.getManaCost()) { //track phyrexian and hybrid costs separately as they won't always affect color - if (shard.isPhyrexian() || shard.isOr2Colorless() || !shard.isMonoColor()) { + if (shard.isPhyrexian() || shard.isOr2Generic() || !shard.isMonoColor()) { if (nonReqColors == null) { nonReqColors = new HashSet(); } diff --git a/forge-gui/src/main/java/forge/match/input/InputPayMana.java b/forge-gui/src/main/java/forge/match/input/InputPayMana.java index d24c4d39289..2da53483a14 100644 --- a/forge-gui/src/main/java/forge/match/input/InputPayMana.java +++ b/forge-gui/src/main/java/forge/match/input/InputPayMana.java @@ -129,8 +129,8 @@ public abstract class InputPayMana extends InputSyncronizedBase { colorCanUse |= color; } } - if (manaCost.isAnyPartPayableWith((byte) ManaAtom.COLORLESS, player.getManaPool())) { - colorCanUse |= ManaAtom.COLORLESS; + if (manaCost.isAnyPartPayableWith((byte) ManaAtom.GENERIC, player.getManaPool())) { + colorCanUse |= ManaAtom.GENERIC; } if (colorCanUse == 0) { // no mana cost or something return abilities; @@ -183,8 +183,8 @@ public abstract class InputPayMana extends InputSyncronizedBase { if (manaCost.isAnyPartPayableWith(color, player.getManaPool())) { colorCanUse |= color; } if (manaCost.needsColor(color, player.getManaPool())) { colorNeeded |= color; } } - if (manaCost.isAnyPartPayableWith((byte) ManaAtom.COLORLESS, player.getManaPool())) { - colorCanUse |= ManaAtom.COLORLESS; + if (manaCost.isAnyPartPayableWith((byte) ManaAtom.GENERIC, player.getManaPool())) { + colorCanUse |= ManaAtom.GENERIC; } if (colorCanUse == 0) { // no mana cost or something @@ -293,7 +293,7 @@ public abstract class InputPayMana extends InputSyncronizedBase { } private static boolean abilityProducesManaColor(final SpellAbility am, AbilityManaPart m, final byte neededColor) { - if (0 != (neededColor & ManaAtom.COLORLESS)) { + if (0 != (neededColor & ManaAtom.GENERIC)) { return true; } diff --git a/forge-gui/src/main/java/forge/match/input/InputSelectCardsForConvoke.java b/forge-gui/src/main/java/forge/match/input/InputSelectCardsForConvoke.java index ff4ab5bc7ad..c2676fbffd1 100644 --- a/forge-gui/src/main/java/forge/match/input/InputSelectCardsForConvoke.java +++ b/forge-gui/src/main/java/forge/match/input/InputSelectCardsForConvoke.java @@ -60,7 +60,7 @@ public final class InputSelectCardsForConvoke extends InputSelectManyBase colors = ColorSet.fromMask(colors.getColor() & remainingCost.getUnpaidColors()); } if (!colors.isMulticolor()) { - // Since the convoke mana logic can use colored mana as colorless if needed, + // Since the convoke mana logic can use colored mana as generic if needed, // there is no need to prompt the user when convoking with a mono-color creature. chosenColor = colors.getColor(); } diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index eebee4a578e..8417d5077e2 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -701,8 +701,8 @@ public class PlayerControllerHuman } @Override - public CardCollectionView chooseCardsToDelve(final int colorLessAmount, final CardCollection grave) { - final int cardsInGrave = Math.min(colorLessAmount, grave.size()); + public CardCollectionView chooseCardsToDelve(final int genericAmount, final CardCollection grave) { + final int cardsInGrave = Math.min(genericAmount, grave.size()); if (cardsInGrave == 0) { return CardCollection.EMPTY; } @@ -1437,7 +1437,7 @@ public class PlayerControllerHuman } else { FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public final void run() { - getGui().message("Cannot pass priority at this time."); + //getGui().message("Cannot pass priority at this time."); } }); }