From 5eca8807d8a3b1626e240441e9d896c04a489572 Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 16 Nov 2013 19:25:43 +0000 Subject: [PATCH] Format mana costs for Echo, Cumulative Upkeep, and Unearth --- .../main/java/forge/card/mana/ManaCost.java | 1 - .../java/forge/card/mana/ManaCostParser.java | 12 ++++- forge-gui/src/main/java/forge/Card.java | 52 +++++++++---------- .../forge/card/ability/AbilityFactory.java | 4 -- .../card/cardfactory/CardStorageReader.java | 5 +- forge-gui/src/main/java/forge/view/Main.java | 2 +- 6 files changed, 39 insertions(+), 37 deletions(-) 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 62b889fe976..b875018edce 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaCost.java +++ b/forge-core/src/main/java/forge/card/mana/ManaCost.java @@ -280,5 +280,4 @@ public final class ManaCost implements Comparable { res.sealClass(sh); return res; } - } diff --git a/forge-core/src/main/java/forge/card/mana/ManaCostParser.java b/forge-core/src/main/java/forge/card/mana/ManaCostParser.java index 0cd3e5f756e..1d515063002 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaCostParser.java +++ b/forge-core/src/main/java/forge/card/mana/ManaCostParser.java @@ -10,6 +10,17 @@ public class ManaCostParser implements IParserManaCost { private final String[] cost; private int nextToken; private int colorlessCost; + + /** + * Parse the given cost and output formatted cost string + * + * @param cost + */ + public static String parse(final String cost) { + final ManaCostParser parser = new ManaCostParser(cost); + final ManaCost manaCost = new ManaCost(parser); + return manaCost.toString(); + } /** * Instantiates a new parser cardname txt mana cost. @@ -54,7 +65,6 @@ public class ManaCostParser implements IParserManaCost { */ @Override public final ManaCostShard next() { - final String unparsed = this.cost[this.nextToken++]; // System.out.println(unparsed); if (StringUtils.isNumeric(unparsed)) { diff --git a/forge-gui/src/main/java/forge/Card.java b/forge-gui/src/main/java/forge/Card.java index ea2fee73d8d..12207b12902 100644 --- a/forge-gui/src/main/java/forge/Card.java +++ b/forge-gui/src/main/java/forge/Card.java @@ -57,6 +57,7 @@ import forge.card.cardfactory.CardFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.mana.ManaCost; +import forge.card.mana.ManaCostParser; import forge.card.replacement.ReplaceMoved; import forge.card.replacement.ReplacementEffect; import forge.card.replacement.ReplacementResult; @@ -2002,7 +2003,7 @@ public class Card extends GameEntity implements Comparable { final StringBuilder sbMana = new StringBuilder(); for (int i = 0; i < keywords.size(); i++) { - String keyword = keywords.get(i).toString(); + String keyword = keywords.get(i); if (keyword.startsWith("Permanents don't untap during their controllers' untap steps") || keyword.startsWith("PreventAllDamageBy") || keyword.startsWith("CantBlock") @@ -2032,23 +2033,22 @@ public class Card extends GameEntity implements Comparable { } sbLong.append(s).append("\r\n"); } else if (keyword.startsWith("Protection:")) { - final String[] k = keywords.get(i).split(":"); + final String[] k = keyword.split(":"); sbLong.append(k[2]).append("\r\n"); } else if (keyword.startsWith("Creatures can't attack unless their controller pays")) { - final String[] k = keywords.get(i).split(":"); + final String[] k = keyword.split(":"); if (!k[3].equals("no text")) { sbLong.append(k[3]).append("\r\n"); } } else if (keyword.startsWith("Enchant")) { - String k = keywords.get(i); + String k = keyword; k = k.replace("Curse", ""); sbLong.append(k).append("\r\n"); - } else if (keyword.startsWith("Fading") - || keyword.startsWith("Ripple") || keywords.get(i).startsWith("Unearth") - || keyword.startsWith("Vanishing") || keywords.get(i).startsWith("Madness")) { - String k = keywords.get(i); - k = k.replace(":", " "); - sbLong.append(k).append("\r\n"); + } else if (keyword.startsWith("Fading") || keyword.startsWith("Ripple") || keyword.startsWith("Vanishing")) { + sbLong.append(keyword.replace(":", " ")).append("\r\n"); + } else if (keyword.startsWith("Unearth") || keyword.startsWith("Madness")) { + String[] parts = keyword.split(":"); + sbLong.append(parts[0] + " " + ManaCostParser.parse(parts[1])).append("\r\n"); } else if (keyword.startsWith("Devour")) { final String[] parts = keyword.split(":"); final String extra = parts.length > 2 ? parts[2] : ""; @@ -2057,7 +2057,7 @@ public class Card extends GameEntity implements Comparable { } else if (keyword.startsWith("Morph")) { sbLong.append("Morph"); if (keyword.contains(":")) { - final Cost mCost = new Cost(keywords.get(i).substring(6), true); + final Cost mCost = new Cost(keyword.substring(6), true); if (!mCost.isOnlyManaCost()) { sbLong.append(" -"); } @@ -2069,21 +2069,17 @@ public class Card extends GameEntity implements Comparable { } } else if (keyword.startsWith("Echo")) { sbLong.append("Echo "); - final String[] upkeepCostParams = keywords.get(i).split(":"); - final String cost = upkeepCostParams[1]; - final String costDesc = upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : cost; - sbLong.append(costDesc); + final String[] upkeepCostParams = keyword.split(":"); + sbLong.append(upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : ManaCostParser.parse(upkeepCostParams[1])); sbLong.append("\r\n"); } else if (keyword.startsWith("Cumulative upkeep")) { sbLong.append("Cumulative upkeep "); - final String[] upkeepCostParams = keywords.get(i).split(":"); - final String cost = upkeepCostParams[1]; - final String costDesc = upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : cost; - sbLong.append(costDesc); + final String[] upkeepCostParams = keyword.split(":"); + sbLong.append(upkeepCostParams.length > 2 ? "- " + upkeepCostParams[2] : ManaCostParser.parse(upkeepCostParams[1])); sbLong.append("\r\n"); } else if (keyword.startsWith("Amplify")) { sbLong.append("Amplify "); - final String[] ampParams = keywords.get(i).split(":"); + final String[] ampParams = keyword.split(":"); final String magnitude = ampParams[1]; sbLong.append(magnitude); sbLong.append("(As this creature enters the battlefield, put a +1/+1 counter on it for each "); @@ -2099,20 +2095,20 @@ public class Card extends GameEntity implements Comparable { sbLong.append("As an additional cost to cast " + this.getName() + ", " + cost1.toSimpleString() + " or pay " + cost2.toSimpleString() + ".\r\n"); } else if (keyword.startsWith("Kicker")) { - final Cost cost = new Cost(keywords.get(i).substring(7), false); + final Cost cost = new Cost(keyword.substring(7), false); sbLong.append("Kicker " + cost.toSimpleString() + "\r\n"); - } else if (keyword.endsWith(".") && !keywords.get(i).startsWith("Haunt")) { - sbLong.append(keywords.get(i).toString()).append("\r\n"); + } else if (keyword.endsWith(".") && !keyword.startsWith("Haunt")) { + sbLong.append(keyword.toString()).append("\r\n"); } else if (keyword.contains("At the beginning of your upkeep, ") && keyword.contains(" unless you pay")) { - sbLong.append(keywords.get(i).toString()).append("\r\n"); + sbLong.append(keyword.toString()).append("\r\n"); } else if (keyword.toString().contains("tap: add ")) { - sbMana.append(keywords.get(i).toString()).append("\r\n"); + sbMana.append(keyword.toString()).append("\r\n"); } else if (keyword.startsWith("Modular") || keyword.startsWith("Soulshift") || keyword.startsWith("Bloodthirst") || keyword.startsWith("ETBReplacement") || keyword.startsWith("MayEffectFromOpeningHand")) { continue; } else if (keyword.startsWith("Provoke")) { - sbLong.append(keywords.get(i)); + sbLong.append(keyword); sbLong.append(" (When this attacks, you may have target creature "); sbLong.append("defending player controls untap and block it if able.)"); } else if (keyword.contains("Haunt")) { @@ -2135,14 +2131,14 @@ public class Card extends GameEntity implements Comparable { if (sb.length() != 0) { sb.append("\r\n"); } - sbLong.append(keywords.get(i)); + sbLong.append(keyword); sbLong.append(" (You may cast this card any time you could cast an instant by sacrificing a "); sbLong.append(offeringType); sbLong.append("and paying the difference in mana costs between this and the sacrificed "); sbLong.append(offeringType); sbLong.append(". Mana cost includes color.)"); } else if (keyword.startsWith("Soulbond")) { - sbLong.append(keywords.get(i)); + sbLong.append(keyword); sbLong.append(" (You may pair this creature "); sbLong.append("with another unpaired creature when either "); sbLong.append("enters the battlefield. They remain paired for "); diff --git a/forge-gui/src/main/java/forge/card/ability/AbilityFactory.java b/forge-gui/src/main/java/forge/card/ability/AbilityFactory.java index 52b2aac2dfb..ed858a98334 100644 --- a/forge-gui/src/main/java/forge/card/ability/AbilityFactory.java +++ b/forge-gui/src/main/java/forge/card/ability/AbilityFactory.java @@ -122,8 +122,6 @@ public final class AbilityFactory { } public static final SpellAbility getAbility(AbilityRecordType type, ApiType api, Map mapParams, Cost abCost, Card hostCard) { - - TargetRestrictions abTgt = mapParams.containsKey("ValidTgts") ? readTarget(mapParams) : null; if (api == ApiType.CopySpellAbility || api == ApiType.Counter || api == ApiType.ChangeTargets) { @@ -158,8 +156,6 @@ public final class AbilityFactory { // ********************************************* // set universal properties of the SpellAbility - - if (mapParams.containsKey("References")) { for (String svar : mapParams.get("References").split(",")) { spellAbility.setSVar(svar, hostCard.getSVar(svar)); diff --git a/forge-gui/src/main/java/forge/card/cardfactory/CardStorageReader.java b/forge-gui/src/main/java/forge/card/cardfactory/CardStorageReader.java index 47f25b4773d..c6b8ef73a88 100644 --- a/forge-gui/src/main/java/forge/card/cardfactory/CardStorageReader.java +++ b/forge-gui/src/main/java/forge/card/cardfactory/CardStorageReader.java @@ -513,10 +513,11 @@ public class CardStorageReader { //check for other key phrases that might be missing "{G}" formatting String[] phrases = new String[] { - "Add * to your mana pool" + "Add * to your mana pool", + "CostDesc\\$ * \\|" }; for (String phrase : phrases) { - String pattern = ".*Description\\$.*" + phrase.replace("* ", "((([WUBRGSXYZ]|[0-9]+) )+)") + ".*"; + String pattern = ".*" + phrase.replace("* ", "((([WUBRGSXYZ]|[0-9]+) )+)") + ".*"; Pattern p = Pattern.compile(pattern); for (int i = 0; i < lines.size(); i++) { String line = lines.get(i); diff --git a/forge-gui/src/main/java/forge/view/Main.java b/forge-gui/src/main/java/forge/view/Main.java index 17017286f3b..5a5f5911c30 100644 --- a/forge-gui/src/main/java/forge/view/Main.java +++ b/forge-gui/src/main/java/forge/view/Main.java @@ -38,7 +38,7 @@ public final class Main { System.setProperty("sun.java2d.d3d", "false"); // Start splash screen first, then data models, then controller. - if(args.length == 0) { + if (args.length == 0) { Singletons.setView(FView.SINGLETON_INSTANCE); Singletons.setModel(FModel.getInstance(true)); Singletons.setControl(FControl.instance);