fix bug where every player state change except for Exhausted did not end

master
melvin 2013-02-17 08:44:31 +08:00
parent d99c28aeaf
commit 3e830fac90
1 changed files with 31 additions and 18 deletions

View File

@ -22,27 +22,40 @@ public class MagicChangePlayerStateAction extends MagicAction {
@Override @Override
public void doAction(final MagicGame game) { public void doAction(final MagicGame game) {
if (player.hasState(state)) { if (player.hasState(state)) {
return; // do nothing
} } else if (state == MagicPlayerState.Exhausted) {
game.doAction(new MagicAddStaticAction(new MagicStatic(MagicLayer.Player) { // no duration, manually removed
@Override game.doAction(new MagicAddStaticAction(new MagicStatic(MagicLayer.Player) {
public void modPlayer( @Override
final MagicPermanent source, public void modPlayer(
final MagicPlayer aPlayer) { final MagicPermanent source,
if (player.getId() == aPlayer.getId()) { final MagicPlayer aPlayer) {
//remove Exhausted state during Untap as MagicUntapPhase stores a copy of the state at begin step if (player.getId() == aPlayer.getId()) {
if (state == MagicPlayerState.Exhausted && aPlayer.getGame().isPhase(MagicPhaseType.Untap)) { // remove Exhausted state during Untap as MagicUntapPhase
game.addDelayedAction(new MagicRemoveStaticAction(this)); // stores a copy of the state at begin step of untap phase
return; if (aPlayer.getGame().isPhase(MagicPhaseType.Untap)) {
} else { game.addDelayedAction(new MagicRemoveStaticAction(this));
} else {
aPlayer.setState(state);
}
}
}
}));
} else {
// until end of turn
game.doAction(new MagicAddStaticAction(new MagicStatic(MagicLayer.Player, MagicStatic.UntilEOT) {
@Override
public void modPlayer(
final MagicPermanent source,
final MagicPlayer aPlayer) {
if (player.getId() == aPlayer.getId()) {
aPlayer.setState(state); aPlayer.setState(state);
} }
} }
} }));
})); }
} }
@Override @Override
public void undoAction(final MagicGame game) { public void undoAction(final MagicGame game) {}
}
} }