package magic.model.event;
import magic.model.MagicDamage;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.action.DealDamageAction;
import magic.model.choice.MagicMayChoice;
import magic.model.choice.MagicTargetChoice;
public class MagicRedirectDamageEvent extends MagicEvent {
public MagicRedirectDamageEvent(final MagicDamage damage) {
super(
damage.getSource(),
new MagicMayChoice(
"Redirect " + damage.getAmount() + " damage to a planeswalker?",
MagicTargetChoice.PLANESWALKER_YOUR_OPPONENT_CONTROLS
),
damage.getTarget(),
EventAction(damage.getAmount(), damage.isCombat()),
"PN may$ redirect " + damage.getAmount() +
" damage to a planeswalker$ your opponent controls."
);
}
private static final MagicEventAction EventAction(final int amount, final boolean isCombat) {
return (final MagicGame game, final MagicEvent event) -> {
if (event.isYes()) {
event.processTargetPermanent(game, (final MagicPermanent planeswalker) -> {
final MagicDamage damage = isCombat ?
MagicDamage.Combat(event.getSource(), planeswalker, amount) :
new MagicDamage(event.getSource(), planeswalker, amount);
game.doAction(new DealDamageAction(damage));
});
} else {
final MagicDamage damage = isCombat ?
MagicDamage.Combat(event.getSource(), event.getRefPlayer(), amount) :
new MagicDamage(event.getSource(), event.getRefPlayer(), amount);
game.doAction(DealDamageAction.NoRedirect(damage));
}
};
}
}