package magic.model.event;
import java.util.LinkedList;
import java.util.List;
import magic.model.MagicGame;
import magic.model.MagicPayedCost;
import magic.model.MagicPermanent;
import magic.model.action.AttachAction;
import magic.model.choice.MagicTargetChoice;
import magic.model.condition.MagicArtificialCondition;
import magic.model.condition.MagicCondition;
import magic.model.target.MagicEquipTargetPicker;
import magic.model.target.MagicOtherPermanentTargetFilter;
import magic.model.target.MagicTargetFilterFactory;
import magic.model.target.MagicTargetHint;
import magic.model.target.MagicTargetFilter;
public class MagicEquipActivation extends MagicPermanentActivation {
private final List<MagicMatchedCostEvent> costs;
private final MagicTargetFilter<MagicPermanent> filter;
private static final MagicMatchedCostEvent AI_MAX_TWICE = new MagicArtificialCondition(MagicCondition.ABILITY_TWICE_CONDITION);
public MagicEquipActivation(final List<MagicMatchedCostEvent> aCosts) {
this(aCosts, "Equip", MagicTargetFilterFactory.CREATURE_YOU_CONTROL);
}
public MagicEquipActivation(final List<MagicMatchedCostEvent> aCosts, final MagicTargetFilter<MagicPermanent> filter) {
this(aCosts, "Equip", filter);
}
public MagicEquipActivation(final List<MagicMatchedCostEvent> aCosts, final String description, final MagicTargetFilter<MagicPermanent> aFilter) {
super(
new MagicCondition[]{
MagicCondition.SORCERY_CONDITION,
MagicCondition.NOT_CREATURE_CONDITION,
},
new MagicActivationHints(MagicTiming.Equipment),
description
);
costs = aCosts;
filter = aFilter;
}
@Override
public Iterable<? extends MagicEvent> getCostEvent(final MagicPermanent source) {
final List<MagicEvent> costEvents = new LinkedList<MagicEvent>();
for (final MagicMatchedCostEvent matched : costs) {
costEvents.add(matched.getEvent(source));
}
costEvents.add(AI_MAX_TWICE.getEvent(source));
return costEvents;
}
@Override
public MagicEvent getPermanentEvent(final MagicPermanent source,final MagicPayedCost payedCost) {
final MagicTargetChoice TARGET_OTHER_CREATURE_YOU_CONTROL = new MagicTargetChoice(
new MagicOtherPermanentTargetFilter(
filter,
source.getEquippedCreature()
),
MagicTargetHint.None,
"target creature you control"
);
return new MagicEvent(
source,
TARGET_OTHER_CREATURE_YOU_CONTROL,
new MagicEquipTargetPicker(source),
this,
"Attach SN to target creature$ you control."
);
}
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game, (final MagicPermanent creature) ->
game.doAction(new AttachAction(event.getPermanent(),creature))
);
}
}