package magic.model.event;
import magic.model.MagicCopyable;
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.choice.MagicCoinFlipChoice;
public class MagicCoinFlipEvent extends MagicEvent {
public MagicCoinFlipEvent(final MagicEvent event, final MagicEventAction winAction, final MagicEventAction loseAction) {
this(event, event.getRef(), winAction, loseAction);
}
public MagicCoinFlipEvent(final MagicEvent event, final int ref, final MagicEventAction winAction, final MagicEventAction loseAction) {
super(
event.getSource(),
event.getPlayer(),
MagicCoinFlipChoice.create(),
ref,
EventAction(winAction, loseAction),
"Choose one$ — (1) Heads; (2) Tails. PN flips a coin."
);
}
public MagicCoinFlipEvent(final MagicEvent event, final MagicCopyable ref, final MagicEventAction winAction, final MagicEventAction loseAction) {
super(
event.getSource(),
event.getPlayer(),
MagicCoinFlipChoice.create(),
ref,
EventAction(winAction, loseAction),
"Choose one$ — (1) Heads; (2) Tails. PN flips a coin$."
);
}
public static final MagicEventAction EventAction(final MagicEventAction winAction, final MagicEventAction loseAction) {
return (final MagicGame game, final MagicEvent event) -> {
//True = Heads
final MagicPlayer player = event.getPlayer();
boolean coinFace = (player.getStateId() & 1) == 0;
boolean playerFace = event.isMode(1);
if (coinFace) {
game.logAppendMessage(player, "Coin landed heads.");
//Heads trigger
} else {
game.logAppendMessage(player, "Coin landed tails.");
//Tails trigger
}
if (playerFace == coinFace) {
game.logAppendMessage(player, player.getName() + " wins.");
winAction.executeEvent(game, event);
//Win trigger
} else {
game.logAppendMessage(player, player.getName() + " loses.");
loseAction.executeEvent(game, event);
//Lose trigger
}
};
}
}