package magic.model.score;
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.action.CombatDamageAction;
import magic.model.action.DeclareBlockersAction;
import magic.model.action.StackResolveAction;
import magic.model.choice.MagicDeclareBlockersResult;
public class MagicGameCombatScore implements MagicCombatScore {
private final MagicGame game;
private final MagicPlayer attackingPlayer;
private final MagicPlayer defendingPlayer;
public MagicGameCombatScore(final MagicGame game,final MagicPlayer attackingPlayer,final MagicPlayer defendingPlayer) {
this.game=game;
this.attackingPlayer=attackingPlayer;
this.defendingPlayer=defendingPlayer;
}
@Override
public int getScore(final MagicDeclareBlockersResult result) {
// immediate mode for triggers
game.setImmediate(true);
game.snapshot();
game.doAction(new DeclareBlockersAction(defendingPlayer,result));
game.doAction(new CombatDamageAction(attackingPlayer,defendingPlayer,true));
game.doAction(new CombatDamageAction(attackingPlayer,defendingPlayer,false));
// resolve triggers
game.checkStatePutTriggers();
int resolved = 0;
while (game.getStack().size() > 0 && resolved < 100 && game.isFinished() == false) {
resolved++;
game.doAction(new StackResolveAction());
game.checkStatePutTriggers();
}
// Give extra points for extra blocked creatures.
final int score=game.getScore()+result.size();
game.restore();
game.setImmediate(false);
return score;
}
}