package magic.model.action;
import magic.ai.ArtificialScoringSystem;
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.trigger.MagicTriggerType;
public class LoseGameAction extends MagicAction {
public static final String LIFE_REASON = " lost the game.";
public static final String POISON_REASON = " lost the game because of poisoning.";
public static final String DRAW_REASON = " lost the game because of an attempt to draw from an empty library.";
public static final String EFFECT_REASON = " lost the game because of an effect from a spell or ability.";
private final String reason;
private MagicPlayer player;
private MagicPlayer oldLosingPlayer = MagicPlayer.NONE;
public LoseGameAction(final MagicPlayer aPlayer,final String aReason) {
player = aPlayer;
reason = aReason;
}
public LoseGameAction(final MagicPlayer aPlayer) {
this(aPlayer, LIFE_REASON);
}
public MagicPlayer getPlayer() {
return player;
}
public String getReason() { return reason; }
public void setPlayer(final MagicPlayer aPlayer) {
player = aPlayer;
}
@Override
public void doAction(final MagicGame game) {
oldLosingPlayer=game.getLosingPlayer();
if (!oldLosingPlayer.isValid()) {
game.executeTrigger(MagicTriggerType.IfPlayerWouldLose, this);
if (player.isValid()) {
setScore(player,ArtificialScoringSystem.getLoseGameScore(game));
game.setLosingPlayer(player);
game.logMessage(player,"{L} " + player + reason);
}
}
}
@Override
public void undoAction(final MagicGame game) {
game.setLosingPlayer(oldLosingPlayer);
}
}