package magic.model.event;
import java.util.Set;
import magic.model.MagicAbility;
import magic.model.MagicCounterType;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicPlayer;
import magic.model.MagicPowerToughness;
import magic.model.MagicSource;
import magic.model.MagicSubType;
import magic.model.MagicType;
import magic.model.action.AddStaticAction;
import magic.model.action.ChangeCountersAction;
import magic.model.action.GainAbilityAction;
import magic.model.choice.MagicTargetChoice;
import magic.model.mstatic.MagicLayer;
import magic.model.mstatic.MagicStatic;
public class MagicAwakenEvent extends MagicEvent {
final private static MagicTargetChoice tchoice = new MagicTargetChoice("target land you control");
final private static MagicStatic PT = new MagicStatic(MagicLayer.SetPT) {
@Override
public void modPowerToughness(final MagicPermanent source, final MagicPermanent permanent, final MagicPowerToughness bPt) {
bPt.set(0, 0);
}
};
final private static MagicStatic Type = new MagicStatic(MagicLayer.Type) {
@Override
public void modSubTypeFlags(final MagicPermanent permanent, final Set<MagicSubType> flags) {
flags.add(MagicSubType.Elemental);
}
@Override
public int getTypeFlags(final MagicPermanent permanent,final int flags) {
return flags | MagicType.Creature.getMask();
}
};
public MagicAwakenEvent(final MagicSource source, final MagicPlayer player, final int n) {
super(
source,
player,
tchoice,
n,
EVENT_ACTION,
"PN puts RN +1/+1 counters on target land$ you control and " +
"it becomes a 0/0 Elemental creature with haste. It's still a land."
);
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent it) -> {
game.doAction(new ChangeCountersAction(
it,
MagicCounterType.PlusOne,
event.getRefInt()
));
game.doAction(new AddStaticAction(it, PT));
game.doAction(new AddStaticAction(it, Type));
game.doAction(new GainAbilityAction(it, MagicAbility.Haste, MagicStatic.Forever));
});
};
}