package magic.model.mstatic; import java.util.Set; import magic.model.MagicAbility; import magic.model.MagicCopyMap; import magic.model.MagicCounterType; import magic.model.MagicPermanent; import magic.model.MagicPowerToughness; import magic.model.MagicSubType; import magic.model.event.MagicTapManaActivation; import magic.model.target.MagicTargetFilterFactory; public class MagicPermanentStatic implements Comparable<MagicPermanentStatic> { public static final MagicPermanentStatic CountersEffect = new MagicPermanentStatic( 0, MagicPermanent.NONE, new MagicStatic(MagicLayer.CountersPT, MagicTargetFilterFactory.CREATURE) { @Override public void modPowerToughness(final MagicPermanent source, final MagicPermanent permanent, final MagicPowerToughness pt) { final int amtP = permanent.getCounters(MagicCounterType.PlusOnePlusZero) + permanent.getCounters(MagicCounterType.PlusOne) + permanent.getCounters(MagicCounterType.PlusOnePlusTwo) + (2 * permanent.getCounters(MagicCounterType.PlusTwoPlusZero)) + (2 * permanent.getCounters(MagicCounterType.PlusTwo)) - permanent.getCounters(MagicCounterType.MinusOneMinusZero) - permanent.getCounters(MagicCounterType.MinusOne) - (2 * permanent.getCounters(MagicCounterType.MinusTwoMinusOne)) - (2 * permanent.getCounters(MagicCounterType.MinusTwo)); final int amtT = permanent.getCounters(MagicCounterType.PlusZeroPlusOne) + (2 * permanent.getCounters(MagicCounterType.PlusZeroPlusTwo)) + permanent.getCounters(MagicCounterType.PlusOne) + (2 * permanent.getCounters(MagicCounterType.PlusOnePlusTwo)) + (2 * permanent.getCounters(MagicCounterType.PlusTwo)) - permanent.getCounters(MagicCounterType.MinusZeroMinusOne) - (2 * permanent.getCounters(MagicCounterType.MinusZeroMinusTwo)) - permanent.getCounters(MagicCounterType.MinusOne) - permanent.getCounters(MagicCounterType.MinusTwoMinusOne) - (2 * permanent.getCounters(MagicCounterType.MinusTwo)); pt.add(amtP,amtT); } } ); public static final MagicPermanentStatic BasicLandEffect = new MagicPermanentStatic( 0, MagicPermanent.NONE, new MagicStatic(MagicLayer.Ability, MagicTargetFilterFactory.LAND) { @Override public void modAbilityFlags(final MagicPermanent source, final MagicPermanent permanent, final Set<MagicAbility> flags) { if (permanent.hasSubType(MagicSubType.Plains)) { permanent.addAbility(MagicTapManaActivation.White); } if (permanent.hasSubType(MagicSubType.Island)) { permanent.addAbility(MagicTapManaActivation.Blue); } if (permanent.hasSubType(MagicSubType.Swamp)) { permanent.addAbility(MagicTapManaActivation.Black); } if (permanent.hasSubType(MagicSubType.Mountain)) { permanent.addAbility(MagicTapManaActivation.Red); } if (permanent.hasSubType(MagicSubType.Forest)) { permanent.addAbility(MagicTapManaActivation.Green); } } } ); private final long id; private final MagicPermanent permanent; private final MagicStatic mstatic; public MagicPermanentStatic(final long id,final MagicPermanent permanent,final MagicStatic mstatic) { this.id=id; this.permanent=permanent; this.mstatic=mstatic; } public MagicPermanentStatic(final MagicCopyMap copyMap,final MagicPermanentStatic source) { this(source.id, copyMap.copy(source.permanent), source.mstatic); } public long getId() { return id; } public MagicPermanent getPermanent() { return permanent; } public MagicStatic getStatic() { return mstatic; } public MagicLayer getLayer() { return mstatic.getLayer(); } @Override public int compareTo(final MagicPermanentStatic permanentStatic) { //sort by layer, break ties by id final int layerDiff = mstatic.getLayer().compareTo(permanentStatic.mstatic.getLayer()); return (layerDiff != 0) ? layerDiff : Long.signum(id-permanentStatic.id); } }