package magic.model.event; import magic.model.MagicGame; import magic.model.MagicPlayer; import magic.model.MagicSource; import magic.model.action.ScryAction; import magic.model.choice.MagicScryChoice; import magic.model.trigger.MagicTriggerType; public class MagicScryEvent extends MagicEvent { public MagicScryEvent(final MagicEvent event) { this(event.getSource(), event.getPlayer(), true); } public MagicScryEvent(final MagicSource source, final MagicPlayer player) { this(source, player, true); } public static MagicScryEvent Pseudo(final MagicEvent event) { return new MagicScryEvent(event.getSource(), event.getPlayer(), false); } public static MagicScryEvent Pseudo(final MagicSource source, final MagicPlayer player) { return new MagicScryEvent(source, player, false); } private MagicScryEvent(final MagicSource source, final MagicPlayer player, final boolean trigger) { super( source, player, new MagicScryChoice(), EventAction(trigger), "" ); } private static final MagicEventAction EventAction(final boolean trigger) { return (final MagicGame game, final MagicEvent event) -> { final MagicPlayer p = event.getPlayer(); if (event.isYes()) { game.logAppendMessage(p, p + " looks at the top card of his or her library and moves it to the bottom."); game.doAction(new ScryAction(p)); } else { game.logAppendMessage(p, p + " looks at the top card of his or her library and puts it back on top."); } //Scry triggers even if the card is not moved. Only once regardless of amount of cards scryed if (trigger) { game.executeTrigger(MagicTriggerType.WhenScry,p); } }; }; }