diff --git a/.gitattributes b/.gitattributes index 23c60c16865..ba0eb7ed176 100644 --- a/.gitattributes +++ b/.gitattributes @@ -175,6 +175,7 @@ forge-core/src/main/java/forge/card/CardChangedType.java -text forge-core/src/main/java/forge/card/CardDb.java -text forge-core/src/main/java/forge/card/CardEdition.java -text forge-core/src/main/java/forge/card/CardFace.java -text +forge-core/src/main/java/forge/card/CardFacePredicates.java -text svneol=unset#text/plain forge-core/src/main/java/forge/card/CardRarity.java -text forge-core/src/main/java/forge/card/CardRules.java -text forge-core/src/main/java/forge/card/CardRulesPredicates.java -text diff --git a/forge-core/src/main/java/forge/card/CardFacePredicates.java b/forge-core/src/main/java/forge/card/CardFacePredicates.java new file mode 100644 index 00000000000..80209bb43b1 --- /dev/null +++ b/forge-core/src/main/java/forge/card/CardFacePredicates.java @@ -0,0 +1,106 @@ +package forge.card; + +import com.google.common.base.Predicate; + +import forge.card.mana.ManaCost; + + +public final class CardFacePredicates { + + private static class PredicateCoreType implements Predicate { + private final CardType.CoreType operand; + private final boolean shouldBeEqual; + + @Override + public boolean apply(final ICardFace face) { + if (null == face) { + return false; + } + return this.shouldBeEqual == face.getType().hasType(this.operand); + } + + public PredicateCoreType(final CardType.CoreType type, final boolean wantEqual) { + this.operand = type; + this.shouldBeEqual = wantEqual; + } + } + + private static class PredicateSuperType implements Predicate { + private final CardType.Supertype operand; + private final boolean shouldBeEqual; + + @Override + public boolean apply(final ICardFace face) { + return this.shouldBeEqual == face.getType().hasSupertype(this.operand); + } + + public PredicateSuperType(final CardType.Supertype type, final boolean wantEqual) { + this.operand = type; + this.shouldBeEqual = wantEqual; + } + } + + /** + * Core type. + * + * @param isEqual + * the is equal + * @param type + * the type + * @return the predicate + */ + public static Predicate coreType(final boolean isEqual, final CardType.CoreType type) { + return new PredicateCoreType(type, isEqual); + } + + /** + * Super type. + * + * @param isEqual + * the is equal + * @param type + * the type + * @return the predicate + */ + public static Predicate superType(final boolean isEqual, final CardType.Supertype type) { + return new PredicateSuperType(type, isEqual); + } + + public static Predicate cmc(final int value) { + return new Predicate() { + @Override + public boolean apply(ICardFace input) { + ManaCost cost = input.getManaCost(); + return cost != null && cost.getCMC() == value; + } + }; + } + + public static class Presets { + /** The Constant isBasicLand. */ + public static final Predicate IS_BASIC_LAND = new Predicate() { + @Override + public boolean apply(final ICardFace subject) { + return subject.getType().isBasicLand(); + } + }; + + /** The Constant isNonBasicLand. */ + public static final Predicate IS_NONBASIC_LAND = new Predicate() { + @Override + public boolean apply(final ICardFace subject) { + return subject.getType().isLand() && !subject.getType().isBasicLand(); + } + }; + + /** The Constant isCreature. */ + public static final Predicate IS_CREATURE = CardFacePredicates + .coreType(true, CardType.CoreType.Creature); + + public static final Predicate IS_LEGENDARY = CardFacePredicates + .superType(true, CardType.Supertype.Legendary); + + public static final Predicate IS_NON_LAND = CardFacePredicates + .coreType(false, CardType.CoreType.Land); + } +}