package magic.model.event; import java.util.Collections; import java.util.Arrays; import java.util.List; import java.util.LinkedList; import magic.model.MagicGame; import magic.model.MagicCardDefinition; import magic.model.MagicSource; import magic.model.MagicPayedCost; import magic.model.MagicPermanent; import magic.model.action.TurnFaceUpAction; import magic.model.condition.MagicCondition; import magic.model.MagicMessage; public class MagicMorphActivation extends MagicPermanentActivation { private static final MagicActivationHints HINT = new MagicActivationHints(MagicTiming.Pump); private static final MagicCondition COND[] = new MagicCondition[]{ MagicCondition.FACE_DOWN_PERMANENT_CONDITION }; private final List<MagicMatchedCostEvent> matchedCostEvents; public static final MagicMorphActivation Manifest = new MagicMorphActivation(Collections.emptyList()) { @Override public Iterable<? extends MagicEvent> getCostEvent(final MagicPermanent source) { return Arrays.asList( new MagicPayManaCostEvent( source, source.getRealCardDefinition().getCost() ) ); } }; public MagicMorphActivation(final List<MagicMatchedCostEvent> aMatchedCostEvents) { this(aMatchedCostEvents, "Morph"); } protected MagicMorphActivation(final List<MagicMatchedCostEvent> aMatchedCostEvents, final String name) { super(COND, HINT, name); matchedCostEvents = aMatchedCostEvents; } @Override public Iterable<? extends MagicEvent> getCostEvent(final MagicPermanent source) { final List<MagicEvent> costEvents = new LinkedList<MagicEvent>(); for (final MagicMatchedCostEvent matched : matchedCostEvents) { costEvents.add(matched.getEvent(source)); } return costEvents; } @Override public final MagicEvent getEvent(final MagicSource source) { return new MagicEvent( source, this, "" ); } @Override public void executeEvent(final MagicGame game, final MagicEvent event) { game.doAction(new TurnFaceUpAction(event.getPermanent())); game.logAppendMessage( event.getPlayer(), MagicMessage.format("%s turns %s face up.", event.getPlayer(), event.getPermanent()) ); } @Override public boolean usesStack() { return false; } @Override public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) { return MagicEvent.NONE; } @Override public void change(final MagicCardDefinition cdef) { cdef.addMorphAct(this); } }