Merge pull request #5316 from magefree/targetAdjustment

Updated implementation of target adjustment
This commit is contained in:
theelk801 2018-09-20 20:15:46 -04:00 committed by GitHub
commit beb190a47b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 336 additions and 258 deletions

View file

@ -0,0 +1,13 @@
package mage.target.targetadjustment;
import mage.abilities.Ability;
import mage.game.Game;
/**
*
* @author TheElk801
*/
public interface TargetAdjuster {
void adjustTargets(Ability ability, Game game);
}

View file

@ -0,0 +1,27 @@
package mage.target.targetadjustment;
import mage.abilities.Ability;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
/**
*
* @author TheElk801
*/
public enum VerseCounterAdjuster implements TargetAdjuster {
instance;
@Override
public void adjustTargets(Ability ability, Game game) {
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(ability.getSourceId());
if (sourcePermanent != null) {
int xValue = sourcePermanent.getCounters(game).getCount(CounterType.VERSE);
FilterPermanent permanentFilter = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear();
ability.addTarget(new TargetPermanent(0, xValue, permanentFilter, false));
}
}
}

View file

@ -0,0 +1,27 @@
package mage.target.targetadjustment;
import mage.abilities.Ability;
import mage.constants.ComparisonType;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
import mage.game.Game;
import mage.target.TargetCard;
import mage.target.common.TargetCardInGraveyard;
/**
*
* @author TheElk801
*/
public enum XCMCGraveyardAdjuster implements TargetAdjuster {
instance;
@Override
public void adjustTargets(Ability ability, Game game) {
int xValue = ability.getManaCostsToPay().getX();
FilterCard filterCard = ((TargetCard) ability.getTargets().get(0)).getFilter().copy();
filterCard.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
filterCard.setMessage(filterCard.getMessage().replace('X', (char) xValue));
ability.getTargets().clear();
ability.getTargets().add(new TargetCardInGraveyard(filterCard));
}
}

View file

@ -0,0 +1,28 @@
package mage.target.targetadjustment;
import mage.abilities.Ability;
import mage.constants.ComparisonType;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
import mage.game.Game;
import mage.target.TargetPermanent;
/**
*
* @author TheElk801
*/
public enum XCMCPermanentAdjuster implements TargetAdjuster {
instance;
@Override
public void adjustTargets(Ability ability, Game game) {
int xValue = ability.getManaCostsToPay().getX();
TargetPermanent oldTargetPermanent = (TargetPermanent) ability.getTargets().get(0);
int minTargets = oldTargetPermanent.getMinNumberOfTargets();
int maxTargets = oldTargetPermanent.getMaxNumberOfTargets();
FilterPermanent permanentFilter = oldTargetPermanent.getFilter().copy();
permanentFilter.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, xValue));
ability.getTargets().clear();
ability.getTargets().add(new TargetPermanent(minTargets, maxTargets, permanentFilter, false));
}
}

View file

@ -0,0 +1,22 @@
package mage.target.targetadjustment;
import mage.abilities.Ability;
import mage.filter.FilterPermanent;
import mage.game.Game;
import mage.target.TargetPermanent;
/**
*
* @author TheElk801
*/
public enum XTargetsAdjuster implements TargetAdjuster {
instance;
@Override
public void adjustTargets(Ability ability, Game game) {
int xValue = ability.getManaCostsToPay().getX();
FilterPermanent permanentFilter = ((TargetPermanent) ability.getTargets().get(0)).getFilter();
ability.getTargets().clear();
ability.addTarget(new TargetPermanent(xValue, permanentFilter));
}
}