package magic.model.event; import magic.model.MagicGame; import magic.model.MagicPayedCost; import magic.model.MagicPermanent; import magic.model.action.PlayCardFromStackAction; import magic.model.choice.MagicTargetChoice; import magic.model.stack.MagicCardOnStack; import magic.model.target.MagicTargetHint; import magic.model.target.MagicTargetPicker; public class MagicPlayAuraEvent extends MagicETBEvent { private final MagicTargetChoice targetChoiceCast; private final MagicTargetChoice targetChoiceOther; private final MagicTargetPicker<?> targetPicker; MagicPlayAuraEvent(final MagicTargetChoice aTargetChoiceCast, final MagicTargetChoice aTargetChoiceOther, final MagicTargetPicker<?> aTargetPicker) { targetChoiceCast = aTargetChoiceCast; targetChoiceOther = aTargetChoiceOther; targetPicker = aTargetPicker; } public MagicTargetChoice getTargetChoice() { return targetChoiceOther; } public MagicTargetPicker<?> getTargetPicker() { return targetPicker; } @Override public MagicEvent getEvent(final MagicCardOnStack cardOnStack,final MagicPayedCost payedCost) { final MagicTargetChoice targetChoice = cardOnStack.isCast() ? targetChoiceCast : targetChoiceOther; return new MagicEvent( cardOnStack, targetChoice, targetPicker, this, "Enchant "+targetChoice.getTargetDescription()+"$ with SN." ); } @Override public void executeEvent(final MagicGame game, final MagicEvent event) { event.processTargetPermanent(game, (final MagicPermanent creature) -> game.doAction(new PlayCardFromStackAction(event.getCardOnStack(),creature)) ); } public static MagicPlayAuraEvent create(final String script) { final String[] token = script.split(","); final MagicTargetPicker<?> targetPicker = MagicTargetPicker.build(token[0]); final MagicTargetChoice targetChoiceCast = new MagicTargetChoice( MagicTargetHint.getHint(token[1]), "target " + MagicTargetHint.removeHint(token[1]) ); final MagicTargetChoice targetChoiceOther = new MagicTargetChoice( MagicTargetHint.getHint(token[1]), "a " + MagicTargetHint.removeHint(token[1]) ); assert targetPicker != null : "targetPicker is null"; assert targetChoiceCast != null : "targetChoiceCast is null"; assert targetChoiceOther != null : "targetChoiceOther is null"; return new MagicPlayAuraEvent(targetChoiceCast, targetChoiceOther, targetPicker); } }