package magic.model.event;
import magic.model.MagicCounterType;
import magic.model.MagicGame;
import magic.model.MagicManaCost;
import magic.model.MagicPayedCost;
import magic.model.MagicPermanent;
import magic.model.MagicSource;
import magic.model.action.ChangeCountersAction;
import magic.model.condition.MagicArtificialCondition;
import magic.model.condition.MagicCondition;
import java.util.Arrays;
public class MagicLevelUpActivation extends MagicPermanentActivation {
private static final MagicActivationHints ACTIVATION_HINTS =
new MagicActivationHints(MagicTiming.Main);
private final MagicManaCost cost;
public MagicLevelUpActivation(final MagicManaCost cost,final int maximum) {
super(
new MagicCondition[]{
MagicCondition.SORCERY_CONDITION,
new MagicArtificialCondition(
new MaximumCondition(maximum)
),
},
ACTIVATION_HINTS,
"Level"
);
this.cost=cost;
}
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicPermanent source) {
return Arrays.asList(new MagicPayManaCostEvent(source,cost));
}
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) {
return new MagicEvent(
source,
this,
"Put a level counter on SN."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeCountersAction(event.getPermanent(),MagicCounterType.Level,1));
}
private static final class MaximumCondition extends MagicCondition {
private final int maximum;
public MaximumCondition(final int maximum) {
this.maximum=maximum;
}
@Override
public boolean accept(final MagicSource source) {
return ((MagicPermanent)source).getCounters(MagicCounterType.Level)<maximum;
}
};
}