From bb5477496a72448c0a0941c77978f5e9155971d3 Mon Sep 17 00:00:00 2001 From: "maurer.it" Date: Wed, 29 Dec 2010 16:21:00 -0500 Subject: [PATCH 1/2] Removed Controls condition after merging code in ControlsPermanent (nantuko's name makes much more sense) Refactored all dependent classes. --- .../sets/magic2010/DragonskullSummit.java | 4 +- .../mage/sets/magic2010/DrownedCatacomb.java | 4 +- .../mage/sets/magic2010/GlacialFortress.java | 4 +- .../mage/sets/magic2010/RootboundCrag.java | 4 +- .../mage/sets/magic2010/SunpetalGrove.java | 4 +- .../scarsofmirrodin/BlackcleaveCliffs.java | 4 +- .../sets/scarsofmirrodin/CopperlineGorge.java | 4 +- .../sets/scarsofmirrodin/DarkslickShores.java | 4 +- .../scarsofmirrodin/RazorvergeThicket.java | 4 +- .../sets/scarsofmirrodin/SeachromeCoast.java | 4 +- .../abilities/condition/common/Controls.java | 107 ----------------- .../condition/common/ControlsPermanent.java | 110 +++++++++++++++++- 12 files changed, 124 insertions(+), 133 deletions(-) delete mode 100644 Mage/src/mage/abilities/condition/common/Controls.java diff --git a/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java b/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java index 1564faacafe..32b9e0d639e 100644 --- a/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java +++ b/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -61,7 +61,7 @@ public class DragonskullSummit extends CardImpl { super(ownerId, 223, "Dragonskull Summit", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new Controls(filter, Controls.CountType.MORE_THAN, 0); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlackManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java b/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java index ca3e6fcea96..b6dbf691be3 100644 --- a/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java +++ b/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -61,7 +61,7 @@ public class DrownedCatacomb extends CardImpl { super(ownerId, 224, "Drowned Catacomb", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new Controls(filter, Controls.CountType.MORE_THAN, 0); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlackManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java b/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java index 9f548ffb587..1c3ea25e564 100644 --- a/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java +++ b/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlueManaAbility; @@ -61,7 +61,7 @@ public class GlacialFortress extends CardImpl { super(ownerId, 226, "Glacial Fortress", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new Controls(filter, Controls.CountType.MORE_THAN, 0); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlueManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java b/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java index 75016ff70d8..ab78a98d086 100644 --- a/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java +++ b/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -61,7 +61,7 @@ public class RootboundCrag extends CardImpl { super(ownerId, 227, "Rootbound Crag", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new Controls(filter, Controls.CountType.MORE_THAN, 0); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new RedManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java b/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java index 891fc6c17f9..51549eb77ea 100644 --- a/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java +++ b/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -61,7 +61,7 @@ public class SunpetalGrove extends CardImpl { super(ownerId, 228, "Sunpetal Grove", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new Controls(filter, Controls.CountType.MORE_THAN, 0); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new GreenManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java index 086e2600125..200cb558f1c 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -59,7 +59,7 @@ public class BlackcleaveCliffs extends CardImpl { super(ownerId, 224, "Blackcleave Cliffs", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new Controls(filter, Controls.CountType.FEWER_THAN, 3); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlackManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java index d5a7380b19b..fb8b15b582f 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -59,7 +59,7 @@ public class CopperlineGorge extends CardImpl { super(ownerId, 225, "Copperline Gorge", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new Controls(filter, Controls.CountType.FEWER_THAN, 3); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new RedManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java index 851eb2264c4..e45f7af9cc9 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -59,7 +59,7 @@ public class DarkslickShores extends CardImpl { super(ownerId, 226, "Darkslick Shores", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new Controls(filter, Controls.CountType.FEWER_THAN, 3); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlueManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java index ce6de19d473..576494243db 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -59,7 +59,7 @@ public class RazorvergeThicket extends CardImpl { super(ownerId, 228, "Razorverge Thicket", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new Controls(filter, Controls.CountType.FEWER_THAN, 3); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new GreenManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java index eecfb7972f9..f62b87cd958 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java @@ -33,7 +33,7 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; -import mage.abilities.condition.common.Controls; +import mage.abilities.condition.common.ControlsPermanent; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlueManaAbility; @@ -59,7 +59,7 @@ public class SeachromeCoast extends CardImpl { super(ownerId, 229, "Seachrome Coast", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new Controls(filter, Controls.CountType.FEWER_THAN, 3); + Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new WhiteManaAbility()); diff --git a/Mage/src/mage/abilities/condition/common/Controls.java b/Mage/src/mage/abilities/condition/common/Controls.java deleted file mode 100644 index 933c9acdb10..00000000000 --- a/Mage/src/mage/abilities/condition/common/Controls.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ - -package mage.abilities.condition.common; - -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.filter.FilterPermanent; -import mage.game.Game; - -/** - * Battlefield checking condition. This condition can decorate other conditions - * as well as be used standalone. - * - * @see #Controls(mage.filter.Filter) - * @see #Controls(mage.filter.Filter, mage.abilities.condition.Condition) - * - * @author maurer.it_at_gmail.com - */ -public class Controls implements Condition { - - public static enum CountType { MORE_THAN, FEWER_THAN, EQUAL_TO }; - private FilterPermanent filter; - private Condition condition; - private CountType type; - private int count; - - /** - * Applies a filter, a {@link CountType}, and count to permanents on the - * battlefield when checking the condition during the - * {@link #apply(mage.game.Game, mage.abilities.Ability) apply} method invocation. - * - * @param filter - */ - public Controls ( FilterPermanent filter, CountType type, int count ) { - this.filter = filter; - this.type = type; - this.count = count; - } - - /** - * Applies a filter, a {@link CountType}, and count to permanents on the - * battlefield and calls the decorated condition to see if it - * {@link #apply(mage.game.Game, mage.abilities.Ability) applies} - * as well. This will force both conditions to apply for this to be true. - * - * @param filter - * @param conditionToDecorate - */ - public Controls ( FilterPermanent filter, CountType type, int count, Condition conditionToDecorate ) { - this(filter, type, count); - this.condition = conditionToDecorate; - } - - /* - * {@inheritDoc} - */ - @Override - public boolean apply(Game game, Ability source) { - boolean conditionApplies = false; - - switch ( this.type ) { - case FEWER_THAN: - conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) > this.count; - break; - case MORE_THAN: - conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) < this.count; - break; - case EQUAL_TO: - conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) == this.count; - break; - } - - //If a decorated condition exists, check it as well and apply them together. - if ( this.condition != null ) { - conditionApplies = conditionApplies && this.condition.apply(game, source); - } - - return conditionApplies; - } - -} diff --git a/Mage/src/mage/abilities/condition/common/ControlsPermanent.java b/Mage/src/mage/abilities/condition/common/ControlsPermanent.java index 7c35d6af7ed..77f73a89be9 100644 --- a/Mage/src/mage/abilities/condition/common/ControlsPermanent.java +++ b/Mage/src/mage/abilities/condition/common/ControlsPermanent.java @@ -1,3 +1,30 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ package mage.abilities.condition.common; import mage.abilities.Ability; @@ -5,15 +32,86 @@ import mage.abilities.condition.Condition; import mage.filter.FilterPermanent; import mage.game.Game; +/** + * Battlefield checking condition. This condition can decorate other conditions + * as well as be used standalone. + * + * @see #Controls(mage.filter.Filter) + * @see #Controls(mage.filter.Filter, mage.abilities.condition.Condition) + * + * @author nantuko + * @author maurer.it_at_gmail.com + */ public class ControlsPermanent implements Condition { - private FilterPermanent filter; + public static enum CountType { MORE_THAN, FEWER_THAN, EQUAL_TO }; + private FilterPermanent filter; + private Condition condition; + private CountType type; + private int count; + + /** + * Applies a filter and delegates creation to + * {@link #ControlsPermanent(mage.filter.FilterPermanent, mage.abilities.condition.common.ControlsPermanent.CountType, int)} + * with {@link CountType#MORE_THAN}, and 0. + * + * @param filter + */ public ControlsPermanent(FilterPermanent filter) { - this.filter = filter; + this(filter, CountType.MORE_THAN, 0); } - @Override - public boolean apply(Game game, Ability source) { - return game.getBattlefield().countAll(filter, source.getControllerId()) > 0; - } + /** + * Applies a filter, a {@link CountType}, and count to permanents on the + * battlefield when checking the condition during the + * {@link #apply(mage.game.Game, mage.abilities.Ability) apply} method invocation. + * + * @param filter + */ + public ControlsPermanent ( FilterPermanent filter, CountType type, int count ) { + this.filter = filter; + this.type = type; + this.count = count; + } + + /** + * Applies a filter, a {@link CountType}, and count to permanents on the + * battlefield and calls the decorated condition to see if it + * {@link #apply(mage.game.Game, mage.abilities.Ability) applies} + * as well. This will force both conditions to apply for this to be true. + * + * @param filter + * @param conditionToDecorate + */ + public ControlsPermanent ( FilterPermanent filter, CountType type, int count, Condition conditionToDecorate ) { + this(filter, type, count); + this.condition = conditionToDecorate; + } + + /* + * {@inheritDoc} + */ + @Override + public boolean apply(Game game, Ability source) { + boolean conditionApplies = false; + + switch ( this.type ) { + case FEWER_THAN: + conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) > this.count; + break; + case MORE_THAN: + conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) < this.count; + break; + case EQUAL_TO: + conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) == this.count; + break; + } + + //If a decorated condition exists, check it as well and apply them together. + if ( this.condition != null ) { + conditionApplies = conditionApplies && this.condition.apply(game, source); + } + + return conditionApplies; + } } From 5c341872b7b8f4bd7dc0b021029dc78e79ded5fb Mon Sep 17 00:00:00 2001 From: "maurer.it" Date: Wed, 29 Dec 2010 16:38:41 -0500 Subject: [PATCH 2/2] Not makes more sense to me as Unless (Unless Controls Permanent Fewer than 4) something along those lines --- Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java | 3 ++- Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java | 3 ++- Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java | 3 ++- Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java | 3 ++- Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java | 3 ++- .../src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java | 3 ++- Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java | 3 ++- Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java | 3 ++- .../src/mage/sets/scarsofmirrodin/RazorvergeThicket.java | 3 ++- Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java | 3 ++- Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java | 4 ++-- .../mage/abilities/condition/common/ControlsPermanent.java | 4 ++-- .../mage/abilities/condition/common/{Not.java => Unless.java} | 4 ++-- 13 files changed, 26 insertions(+), 16 deletions(-) rename Mage/src/mage/abilities/condition/common/{Not.java => Unless.java} (89%) diff --git a/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java b/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java index 32b9e0d639e..18beb410234 100644 --- a/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java +++ b/Mage.Sets/src/mage/sets/magic2010/DragonskullSummit.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -61,7 +62,7 @@ public class DragonskullSummit extends CardImpl { super(ownerId, 223, "Dragonskull Summit", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0)); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlackManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java b/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java index b6dbf691be3..7a4fd74fb7b 100644 --- a/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java +++ b/Mage.Sets/src/mage/sets/magic2010/DrownedCatacomb.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -61,7 +62,7 @@ public class DrownedCatacomb extends CardImpl { super(ownerId, 224, "Drowned Catacomb", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0)); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlackManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java b/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java index 1c3ea25e564..1b455f09a37 100644 --- a/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java +++ b/Mage.Sets/src/mage/sets/magic2010/GlacialFortress.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlueManaAbility; @@ -61,7 +62,7 @@ public class GlacialFortress extends CardImpl { super(ownerId, 226, "Glacial Fortress", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0)); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlueManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java b/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java index ab78a98d086..5b090759e44 100644 --- a/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java +++ b/Mage.Sets/src/mage/sets/magic2010/RootboundCrag.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -61,7 +62,7 @@ public class RootboundCrag extends CardImpl { super(ownerId, 227, "Rootbound Crag", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0)); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new RedManaAbility()); diff --git a/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java b/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java index 51549eb77ea..fdd0f1f1935 100644 --- a/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java +++ b/Mage.Sets/src/mage/sets/magic2010/SunpetalGrove.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -61,7 +62,7 @@ public class SunpetalGrove extends CardImpl { super(ownerId, 228, "Sunpetal Grove", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "M10"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.MORE_THAN, 0)); String abilityText = "tap it unless you control a " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new GreenManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java index 200cb558f1c..21061967d36 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/BlackcleaveCliffs.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -59,7 +60,7 @@ public class BlackcleaveCliffs extends CardImpl { super(ownerId, 224, "Blackcleave Cliffs", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 4)); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlackManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java index fb8b15b582f..f7ea3ff49c4 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/CopperlineGorge.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -59,7 +60,7 @@ public class CopperlineGorge extends CardImpl { super(ownerId, 225, "Copperline Gorge", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 4)); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new RedManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java index e45f7af9cc9..591b730aefe 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/DarkslickShores.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlackManaAbility; @@ -59,7 +60,7 @@ public class DarkslickShores extends CardImpl { super(ownerId, 226, "Darkslick Shores", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 4)); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new BlueManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java index 576494243db..ff9a8a79cf7 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/RazorvergeThicket.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -59,7 +60,7 @@ public class RazorvergeThicket extends CardImpl { super(ownerId, 228, "Razorverge Thicket", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 4)); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new GreenManaAbility()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java index f62b87cd958..316c2ffd0e3 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/SeachromeCoast.java @@ -34,6 +34,7 @@ import mage.Constants.Rarity; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.ControlsPermanent; +import mage.abilities.condition.common.Unless; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.mana.BlueManaAbility; @@ -59,7 +60,7 @@ public class SeachromeCoast extends CardImpl { super(ownerId, 229, "Seachrome Coast", Rarity.RARE, new CardType[]{CardType.LAND}, null); this.expansionSetCode = "SOM"; - Condition controls = new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 3); + Condition controls = new Unless(new ControlsPermanent(filter, ControlsPermanent.CountType.FEWER_THAN, 4)); String abilityText = "tap it unless you control fewer than 3 " + filter.getMessage(); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new TapSourceEffect(), controls, abilityText), abilityText)); this.addAbility(new WhiteManaAbility()); diff --git a/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java b/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java index e5bca3dc5ba..248eb8b8052 100644 --- a/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java +++ b/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java @@ -34,7 +34,7 @@ import mage.Constants.Rarity; import mage.Constants.Zone; import mage.MageInt; import mage.abilities.common.SimpleTriggeredAbility; -import mage.abilities.condition.common.Not; +import mage.abilities.condition.common.Unless; import mage.abilities.condition.common.TenOrLessLife; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.LoseLifeSourceEffect; @@ -79,7 +79,7 @@ class VampireLaceratorTriggeredAbility extends SimpleTriggeredAbility { super(Zone.BATTLEFIELD, EventType.UPKEEP_STEP_PRE, new ConditionalOneShotEffect( new LoseLifeSourceEffect(1), - new Not( new TenOrLessLife(AN_OPPONENT)), + new Unless( new TenOrLessLife(AN_OPPONENT)), "At the beginning of your upkeep, you lose 1 " + "life unless an opponent has 10 or less life.")); } diff --git a/Mage/src/mage/abilities/condition/common/ControlsPermanent.java b/Mage/src/mage/abilities/condition/common/ControlsPermanent.java index 77f73a89be9..77964ae1790 100644 --- a/Mage/src/mage/abilities/condition/common/ControlsPermanent.java +++ b/Mage/src/mage/abilities/condition/common/ControlsPermanent.java @@ -97,10 +97,10 @@ public class ControlsPermanent implements Condition { switch ( this.type ) { case FEWER_THAN: - conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) > this.count; + conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) < this.count; break; case MORE_THAN: - conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) < this.count; + conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) > this.count; break; case EQUAL_TO: conditionApplies = game.getBattlefield().countAll(filter, source.getControllerId()) == this.count; diff --git a/Mage/src/mage/abilities/condition/common/Not.java b/Mage/src/mage/abilities/condition/common/Unless.java similarity index 89% rename from Mage/src/mage/abilities/condition/common/Not.java rename to Mage/src/mage/abilities/condition/common/Unless.java index 4ff5f44cebd..8762227c7d8 100644 --- a/Mage/src/mage/abilities/condition/common/Not.java +++ b/Mage/src/mage/abilities/condition/common/Unless.java @@ -16,11 +16,11 @@ import mage.game.Game; * * @author maurer.it_at_gmail.com */ -public class Not implements Condition { +public class Unless implements Condition { private Condition condition; - public Not ( Condition condition ) { + public Unless ( Condition condition ) { this.condition = condition; }