Add Mentor mechanic

master
Ada Joule 2018-11-14 14:22:36 +07:00 committed by Melvin Zhang
parent f3d488fa37
commit 8c1901072c
3 changed files with 42 additions and 0 deletions

View File

@ -649,6 +649,12 @@ public enum MagicAbility {
}
}
},
Mentor("mentor", 0) {
@Override
protected void addAbilityImpl(final MagicAbilityStore card, final Matcher arg) {
card.add(ThisAttacksTrigger.Mentor);
}
},
// abilities that involve SN
ShockLand("As SN enters the battlefield, you may " + ARG.COST + "\\. If you don't, SN enters the battlefield tapped\\.", -10) {

View File

@ -2281,6 +2281,16 @@ public class MagicTargetFilterFactory {
}
};
public static final MagicPermanentFilterImpl MENTOR = new MagicPermanentFilterImpl() {
@Override
public boolean accept(final MagicSource source, final MagicPlayer player, final MagicPermanent target) {
final MagicPermanent mentor = (MagicPermanent)source;
return target.isCreature() &&
target.isAttacking() &&
target.getPower() < mentor.getPower();
}
};
/**
* Single texts completely specifying the targeting condition.
*/

View File

@ -1,12 +1,16 @@
package magic.model.trigger;
import magic.model.MagicCounterType;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.event.MagicEvent;
import magic.model.event.MagicSourceEvent;
import magic.model.event.MagicExertEvent;
import magic.model.choice.MagicMayChoice;
import magic.model.choice.MagicTargetChoice;
import magic.model.action.EnqueueTriggerAction;
import magic.model.action.ChangeCountersAction;
import magic.model.target.MagicTargetFilterFactory;
public abstract class ThisAttacksTrigger extends AttacksTrigger {
public ThisAttacksTrigger(final int priority) {
@ -51,4 +55,26 @@ public abstract class ThisAttacksTrigger extends AttacksTrigger {
}
};
}
public static ThisAttacksTrigger Mentor = new ThisAttacksTrigger() {
@Override
public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPermanent attacker) {
return new MagicEvent(
permanent,
new MagicTargetChoice(
MagicTargetFilterFactory.MENTOR,
"an attacking creature you control with lesser power than " + permanent
),
this,
"PN puts a +1/+1 counter on target attacking creature with less power than SN.$"
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game, permanent -> {
game.doAction(new ChangeCountersAction(event.getPlayer(), permanent, MagicCounterType.PlusOne, 1));
});
}
};
}