diff --git a/src/main/java/forge/PhaseHandler.java b/src/main/java/forge/PhaseHandler.java index 42025b523cf..7a7d088a63f 100644 --- a/src/main/java/forge/PhaseHandler.java +++ b/src/main/java/forge/PhaseHandler.java @@ -387,7 +387,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } else if (phase.equals(Constant.Phase.END_OF_TURN)) { AllZone.getEndOfTurn().executeAt(); } else if (phase.equals(Constant.Phase.CLEANUP)) { - AllZone.getPhaseHandler().getPlayerTurn().setAssignedDamage(0); + AllZone.getPhaseHandler().getPlayerTurn().clearAssignedDamage(); // Reset Damage received map final CardList list = AllZoneUtil.getCardsIn(Zone.Battlefield); diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index 140fb8aa838..efee7b23c34 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -59,7 +59,7 @@ public abstract class Player extends GameEntity { private int startingLife; /** The assigned damage. */ - private int assignedDamage; + private Map assignedDamage = new HashMap(); /** The life lost this turn. */ private int lifeLostThisTurn = 0; @@ -172,7 +172,7 @@ public abstract class Player extends GameEntity { this.life = 20; lifeLostThisTurn = 0; this.poisonCounters = 0; - this.assignedDamage = 0; + this.assignedDamage.clear(); this.setPreventNextDamage(0); this.lastDrawnCard = null; this.numDrawnThisTurn = 0; @@ -531,7 +531,7 @@ public abstract class Player extends GameEntity { } } if (damageToDo > 0) { - this.addAssignedDamage(damageToDo); + this.addAssignedDamage(damageToDo, source); GameActionUtil.executeDamageDealingEffects(source, damageToDo); GameActionUtil.executeDamageToPlayerEffects(this, source, damageToDo); @@ -823,8 +823,8 @@ public abstract class Player extends GameEntity { * @param n * a int. */ - public final void setAssignedDamage(final int n) { - this.assignedDamage = n; + public final void clearAssignedDamage() { + this.assignedDamage.clear(); } /** @@ -835,8 +835,8 @@ public abstract class Player extends GameEntity { * @param n * a int. */ - public final void addAssignedDamage(final int n) { - this.assignedDamage += n; + public final void addAssignedDamage(final int n, final Card source) { + this.assignedDamage.put(source, n); } /** @@ -847,7 +847,32 @@ public abstract class Player extends GameEntity { * @return a int. */ public final int getAssignedDamage() { - return this.assignedDamage; + int num = 0; + for (Integer value : assignedDamage.values()) { + num += value; + } + return num; + } + + /** + *

+ * Getter for the field assignedDamage. + *

+ * + * @return a int. + */ + public final int getAssignedDamage(String type) { + Map valueMap = new HashMap(); + for (Card c : assignedDamage.keySet()) { + if (c.isType(type)) { + valueMap.put(c, assignedDamage.get(c)); + } + } + int num = 0; + for (Integer value : valueMap.values()) { + num += value; + } + return num; } /** diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 3be9ee433e9..4d25b73991d 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -2878,6 +2878,18 @@ public class CardFactoryUtil { return CardFactoryUtil.doXMath(c.getController().getAssignedDamage(), m, c); } + // Count$YourTypeDamageThisTurn Type + if (sq[0].contains("OppTypeDamageThisTurn")) { + String[] type = sq[0].split(" "); + return CardFactoryUtil.doXMath(c.getController().getOpponent().getAssignedDamage(type[1]), m, c); + } + + // Count$YourTypeDamageThisTurn Type + if (sq[0].contains("YourTypeDamageThisTurn")) { + String[] type = sq[0].split(" "); + return CardFactoryUtil.doXMath(c.getController().getAssignedDamage(type[1]), m, c); + } + if (sq[0].contains("YourLandsPlayed")) { return CardFactoryUtil.doXMath(c.getController().getNumLandsPlayed(), m, c); }