From cdb3ccfc3807f462a7d281aeefcd7b8e12b05bf6 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Fri, 20 Jul 2012 13:06:42 +0400 Subject: [PATCH] new effect discarding mechanism --- Mage/src/mage/abilities/effects/ContinuousEffect.java | 1 + .../src/mage/abilities/effects/ContinuousEffectImpl.java | 7 +++++++ Mage/src/mage/abilities/effects/ContinuousEffects.java | 1 - .../mage/abilities/effects/ContinuousEffectsList.java | 9 +++++++-- Mage/src/mage/game/GameImpl.java | 1 + 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Mage/src/mage/abilities/effects/ContinuousEffect.java b/Mage/src/mage/abilities/effects/ContinuousEffect.java index 230fd29a03c..5d22ca0625e 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffect.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffect.java @@ -43,6 +43,7 @@ import java.util.Date; public interface ContinuousEffect> extends Effect { public boolean isUsed(); + public boolean isDiscarded(); public Duration getDuration(); public Date getTimestamp(); public void setTimestamp(); diff --git a/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java b/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java index 721c8461408..a58ee5103a8 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java @@ -52,6 +52,7 @@ public abstract class ContinuousEffectImpl> ex protected SubLayer sublayer; protected Date timestamp; protected boolean used = false; + protected boolean discarded = false; // for manual effect discard protected boolean affectedObjectsSet = false; protected List objects = new ArrayList(); protected Map metadata = new HashMap(); @@ -76,6 +77,7 @@ public abstract class ContinuousEffectImpl> ex this.sublayer = effect.sublayer; this.timestamp = new Date(effect.timestamp.getTime()); this.used = effect.used; + this.discarded = effect.discarded; this.affectedObjectsSet = effect.affectedObjectsSet; this.objects.addAll(effect.objects); } @@ -120,6 +122,11 @@ public abstract class ContinuousEffectImpl> ex return used; } + @Override + public boolean isDiscarded() { + return discarded; + } + @Override public void init(Ability source, Game game) { //20100716 - 611.2c diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index b145ff4fbee..b76b8ed2a31 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -130,7 +130,6 @@ public class ContinuousEffects implements Serializable { restrictionEffects.removeInactiveEffects(game); asThoughEffects.removeInactiveEffects(game); costModificationEffects.removeInactiveEffects(game); - } public List getLayeredEffects(Game game) { diff --git a/Mage/src/mage/abilities/effects/ContinuousEffectsList.java b/Mage/src/mage/abilities/effects/ContinuousEffectsList.java index 4f77a4fad26..18d350a2263 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffectsList.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffectsList.java @@ -27,11 +27,12 @@ */ package mage.abilities.effects; -import java.util.*; import mage.Constants; import mage.abilities.Ability; import mage.game.Game; +import java.util.*; + /** * * @author BetaSteward_at_googlemail.com @@ -80,9 +81,13 @@ public class ContinuousEffectsList extends ArrayList Ability ability = abilityMap.get(effect.getId()); if (ability == null) return true; + + if (effect.isDiscarded()) + return true; + switch(effect.getDuration()) { case WhileOnBattlefield: - if (game.getObject(ability.getSourceId()) == null) + if (game.getObject(ability.getSourceId()) == null) //TODO: does this really works?? object is returned across the game return (true); case OneUse: return effect.isUsed(); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 61a93bf0d10..bf159777166 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -726,6 +726,7 @@ public abstract class GameImpl> implements Game, Serializa } catch (Exception ex) { logger.fatal("Game exception ", ex); + ex.printStackTrace(); this.fireErrorEvent("Game exception occurred: ", ex); //restoreState(bookmark); bookmark = 0;