From b9d98eb564a0da66a4e025ab37d016f3b7836d78 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 27 Oct 2012 14:53:41 +0200 Subject: [PATCH] Fixed issue #58 (ability from night and day side of "Screeching Bat" triggered simultaneously) --- .../mage/sets/innistrad/ScreechingBat.java | 6 +++-- .../mage/sets/innistrad/StalkingVampire.java | 4 +++- .../common/TransformedCondition.java | 24 ++++++++++++++++++- .../ConditionalTriggeredAbility.java | 10 +++++++- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/sets/innistrad/ScreechingBat.java b/Mage.Sets/src/mage/sets/innistrad/ScreechingBat.java index 1d18630c912..ffa8655fb9a 100644 --- a/Mage.Sets/src/mage/sets/innistrad/ScreechingBat.java +++ b/Mage.Sets/src/mage/sets/innistrad/ScreechingBat.java @@ -44,6 +44,8 @@ import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import java.util.UUID; +import mage.abilities.condition.common.TransformedCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; /** * @author nantuko @@ -66,7 +68,7 @@ public class ScreechingBat extends CardImpl { // At the beginning of your upkeep, you may pay {2}{B}{B}. If you do, transform Screeching Bat. this.addAbility(new TransformAbility()); - this.addAbility(new ScreechingBatBeginningOfUpkeepTriggeredAbility()); + this.addAbility(new ConditionalTriggeredAbility(new ScreechingBatBeginningOfUpkeepTriggeredAbility(), new TransformedCondition(true), "", true)); } public ScreechingBat(final ScreechingBat card) { @@ -82,7 +84,7 @@ public class ScreechingBat extends CardImpl { class ScreechingBatBeginningOfUpkeepTriggeredAbility extends TriggeredAbilityImpl { public ScreechingBatBeginningOfUpkeepTriggeredAbility() { - super(Constants.Zone.BATTLEFIELD, new ScreechingBatTransformSourceEffect(), true); + super(Constants.Zone.BATTLEFIELD, new ScreechingBatTransformSourceEffect()); } public ScreechingBatBeginningOfUpkeepTriggeredAbility(final ScreechingBatBeginningOfUpkeepTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/sets/innistrad/StalkingVampire.java b/Mage.Sets/src/mage/sets/innistrad/StalkingVampire.java index 2cbffa6612d..843ec63b2cd 100644 --- a/Mage.Sets/src/mage/sets/innistrad/StalkingVampire.java +++ b/Mage.Sets/src/mage/sets/innistrad/StalkingVampire.java @@ -33,6 +33,8 @@ import mage.MageInt; import mage.cards.CardImpl; import java.util.UUID; +import mage.abilities.condition.common.TransformedCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; /** * @author nantuko @@ -52,7 +54,7 @@ public class StalkingVampire extends CardImpl { this.toughness = new MageInt(5); // At the beginning of your upkeep, you may pay {2}{B}{B}. If you do, transform Stalking Vampire. - this.addAbility(new ScreechingBatBeginningOfUpkeepTriggeredAbility()); + this.addAbility(new ConditionalTriggeredAbility(new ScreechingBatBeginningOfUpkeepTriggeredAbility(), new TransformedCondition(), "", true)); } public StalkingVampire(final StalkingVampire card) { diff --git a/Mage/src/mage/abilities/condition/common/TransformedCondition.java b/Mage/src/mage/abilities/condition/common/TransformedCondition.java index 2905e13c7f5..fa1c91b3af0 100644 --- a/Mage/src/mage/abilities/condition/common/TransformedCondition.java +++ b/Mage/src/mage/abilities/condition/common/TransformedCondition.java @@ -30,6 +30,7 @@ package mage.abilities.condition.common; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.game.Game; +import mage.game.permanent.Permanent; /** * @@ -37,11 +38,32 @@ import mage.game.Game; */ public class TransformedCondition implements Condition { + protected Boolean notCondition; + public TransformedCondition() { + this(false); + } + + /** + * The condition checks wether a permanent is transformed or not. + * + * @param notCondition if true the condition is true when the permanent is not transformed + * @return true if the condition is true, false if the condition is false + */ + public TransformedCondition(Boolean notCondition) { + this.notCondition = notCondition; } @Override public boolean apply(Game game, Ability source) { - return game.getPermanent(source.getSourceId()).isTransformed(); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + if (notCondition) { + return !permanent.isTransformed(); + } else { + return permanent.isTransformed(); + } + } + return false; } } diff --git a/Mage/src/mage/abilities/decorator/ConditionalTriggeredAbility.java b/Mage/src/mage/abilities/decorator/ConditionalTriggeredAbility.java index 82c79ec5b38..c09f829ab8a 100644 --- a/Mage/src/mage/abilities/decorator/ConditionalTriggeredAbility.java +++ b/Mage/src/mage/abilities/decorator/ConditionalTriggeredAbility.java @@ -17,11 +17,16 @@ public class ConditionalTriggeredAbility extends TriggeredAbilityImpl