From 559c96412a3e114f27c55fda79c3d36a099a0a6c Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 13 Jan 2014 09:56:21 +0000 Subject: [PATCH] - BNG: Added Ephara, God of the Polis --- .../java/forge/game/card/CardFactoryUtil.java | 28 ++++++++++++- .../main/java/forge/game/card/CardUtil.java | 25 +++++++++++ .../src/main/java/forge/game/zone/Zone.java | 42 ++++++++++++++++++- 3 files changed, 92 insertions(+), 3 deletions(-) diff --git a/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java index 498205adbab..1479a3108ec 100644 --- a/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1169,7 +1169,7 @@ public class CardFactoryUtil { } // Count$Chroma. - if (sq[0].contains("Chroma") || sq[0].contains("Devotion")) { + if (sq[0].contains("Chroma") || sq[0].equals("Devotion")) { ZoneType sourceZone = sq[0].contains("ChromaInGrave") ? ZoneType.Graveyard : ZoneType.Battlefield; String colorAbb = sq[1]; if (colorAbb.contains("Chosen")) { @@ -1192,6 +1192,19 @@ public class CardFactoryUtil { } return doXMath(colorOcurrencices, m, c); } + if (sq[0].contains("DevotionDual")) { + int colorOcurrencices = 0; + byte color1 = MagicColor.fromName(sq[1]); + byte color2 = MagicColor.fromName(sq[2]); + for(Card c0 : cc.getCardsIn(ZoneType.Battlefield)) { + for (ManaCostShard sh : c0.getManaCost()) { + if (sh.canBePaidWithManaOfColor(color1) || sh.canBePaidWithManaOfColor(color2)) { + colorOcurrencices++; + } + } + } + return doXMath(colorOcurrencices, m, c); + } if (sq[0].contains("Hellbent")) return doXMath(Integer.parseInt(sq[cc.hasHellbent() ? 1 : 2]), m, c); if (sq[0].contains("Metalcraft")) return doXMath(Integer.parseInt(sq[cc.hasMetalcraft() ? 1 : 2]), m, c); @@ -1297,6 +1310,19 @@ public class CardFactoryUtil { return doXMath(res.size(), m, c); } + // Count$LastTurnEntered [from ] + if (sq[0].contains("LastTurnEntered")) { + final String[] workingCopy = l[0].split("_"); + + ZoneType destination = ZoneType.smartValueOf(workingCopy[1]); + final boolean hasFrom = workingCopy[2].equals("from"); + ZoneType origin = hasFrom ? ZoneType.smartValueOf(workingCopy[3]) : null; + String validFilter = workingCopy[hasFrom ? 4 : 2] ; + + final List res = CardUtil.getLastTurnEntered(destination, origin, validFilter, c); + return doXMath(res.size(), m, c); + } + // Count$AttackersDeclared if (sq[0].contains("AttackersDeclared")) { return doXMath(cc.getAttackersDeclaredThisTurn(), m, c); diff --git a/forge-gui/src/main/java/forge/game/card/CardUtil.java b/forge-gui/src/main/java/forge/game/card/CardUtil.java index 09bde2eb986..7740d40652b 100644 --- a/forge-gui/src/main/java/forge/game/card/CardUtil.java +++ b/forge-gui/src/main/java/forge/game/card/CardUtil.java @@ -88,6 +88,31 @@ public final class CardUtil { return res; } + /** + * getLastTurnEntered. + * + * @param to zone going to + * @param from zone coming from + * @param valid a isValid expression + * @param src a Card object + * @return a List that matches the given criteria + */ + public static List getLastTurnEntered(final ZoneType to, final ZoneType from, final String valid, final Card src) { + List res = new ArrayList(); + final Game game = src.getGame(); + if (to != ZoneType.Stack) { + for (Player p : game.getPlayers()) { + res.addAll(p.getZone(to).getCardsAddedLastTurn(from)); + } + } else { + res.addAll(game.getStackZone().getCardsAddedLastTurn(from)); + } + + res = CardLists.getValidCards(res, valid, src.getController(), src); + + return res; + } + public static List getThisTurnCast(final String valid, final Card src) { List res = new ArrayList(); final Game game = src.getGame(); diff --git a/forge-gui/src/main/java/forge/game/zone/Zone.java b/forge-gui/src/main/java/forge/game/zone/Zone.java index 24ec97f8a08..41a8d574ac4 100644 --- a/forge-gui/src/main/java/forge/game/zone/Zone.java +++ b/forge-gui/src/main/java/forge/game/zone/Zone.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Map.Entry; import java.util.concurrent.CopyOnWriteArrayList; import com.google.common.base.Predicate; @@ -56,6 +57,7 @@ public class Zone implements java.io.Serializable, Iterable { protected final Game game; protected final transient MapOfLists cardsAddedThisTurn = new EnumMapOfLists<>(ZoneType.class, CollectionSuppliers.arrayLists()); + protected final transient MapOfLists cardsAddedLastTurn = new EnumMapOfLists<>(ZoneType.class, CollectionSuppliers.arrayLists()); public Zone(final ZoneType zone, Game game) { this.zoneType = zone; @@ -177,6 +179,15 @@ public class Zone implements java.io.Serializable, Iterable { return cardsAddedThisTurn; } + /** + *

+ * Getter for the field cardsAddedLastTurn. + *

+ */ + public final MapOfLists getCardsAddedLastTurn() { + return cardsAddedLastTurn; + } + /** *

* Getter for the field cardsAddedThisTurn. @@ -188,14 +199,37 @@ public class Zone implements java.io.Serializable, Iterable { */ public final List getCardsAddedThisTurn(final ZoneType origin) { //System.out.print("Request cards put into " + this.getZoneType() + " from " + origin + ".Amount: "); + return getCardsAdded(cardsAddedThisTurn, origin); + } + + /** + *

+ * Getter for the field getcardsAddedLastTurn. + *

+ * + * @param origin + * a {@link java.lang.String} object. + * @return a {@link forge.CardList} object. + */ + public final List getCardsAddedLastTurn(final ZoneType origin) { + //System.out.print("Last turn - Request cards put into " + this.getZoneType() + " from " + origin + ".Amount: "); + return getCardsAdded(cardsAddedLastTurn, origin); + } + + /** + *

+ * getCardsAdded. + *

+ */ + private final List getCardsAdded(final MapOfLists cardsAdded, final ZoneType origin) { if (origin != null) { - Collection cards = cardsAddedThisTurn.get(origin); + Collection cards = cardsAdded.get(origin); return cards == null ? Lists.newArrayList() : Lists.newArrayList(cards); } // all cards if key == null final List ret = new ArrayList(); - for (Collection kv : cardsAddedThisTurn.values()) { + for (Collection kv : cardsAdded.values()) { ret.addAll(kv); } return ret; @@ -207,6 +241,10 @@ public class Zone implements java.io.Serializable, Iterable { *

*/ public final void resetCardsAddedThisTurn() { + this.cardsAddedLastTurn.clear(); + for (Entry> entry : this.cardsAddedThisTurn.entrySet()) { + this.cardsAddedLastTurn.addAll(entry.getKey(), entry.getValue()); + } this.cardsAddedThisTurn.clear(); }