2013-04-12 19:32:25 -07:00
|
|
|
package magic.model.action;
|
|
|
|
|
|
|
|
import magic.model.MagicGame;
|
|
|
|
import magic.model.MagicPermanent;
|
|
|
|
import magic.model.MagicPermanentState;
|
2020-01-15 12:02:42 -08:00
|
|
|
import magic.model.MagicPlayer;
|
2013-10-05 19:40:54 -07:00
|
|
|
import magic.model.trigger.MagicTriggerType;
|
2013-04-12 19:32:25 -07:00
|
|
|
|
2015-04-13 02:22:38 -07:00
|
|
|
public class ChangeStateAction extends MagicAction {
|
2013-04-12 19:32:25 -07:00
|
|
|
|
2013-10-05 19:40:54 -07:00
|
|
|
public final MagicPermanent permanent;
|
|
|
|
public final MagicPermanentState state;
|
2013-04-12 19:32:25 -07:00
|
|
|
private final boolean set;
|
|
|
|
private boolean changed;
|
2013-06-23 18:33:35 -07:00
|
|
|
|
2015-04-13 02:22:38 -07:00
|
|
|
public static ChangeStateAction Set(final MagicPermanent permanent,final MagicPermanentState state) {
|
|
|
|
return new ChangeStateAction(permanent, state, true);
|
2013-06-21 23:40:39 -07:00
|
|
|
}
|
2013-06-23 18:33:35 -07:00
|
|
|
|
2017-07-25 22:41:02 -07:00
|
|
|
public static ChangeStateAction DoesNotUntapDuringNext(final MagicPermanent permanent, final MagicPlayer player) {
|
|
|
|
if (player.getIndex() == 0) {
|
|
|
|
return new ChangeStateAction(permanent, MagicPermanentState.DoesNotUntapDuringNext0, true);
|
|
|
|
} else {
|
|
|
|
return new ChangeStateAction(permanent, MagicPermanentState.DoesNotUntapDuringNext1, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-04-13 02:22:38 -07:00
|
|
|
public static ChangeStateAction Clear(final MagicPermanent permanent,final MagicPermanentState state) {
|
|
|
|
return new ChangeStateAction(permanent, state, false);
|
2013-06-21 23:40:39 -07:00
|
|
|
}
|
2013-06-23 18:33:35 -07:00
|
|
|
|
2015-04-13 02:22:38 -07:00
|
|
|
protected ChangeStateAction(final MagicPermanent aPermanent,final MagicPermanentState aState,final boolean aSet) {
|
2013-06-21 23:40:39 -07:00
|
|
|
permanent = aPermanent;
|
|
|
|
state = aState;
|
|
|
|
set = aSet;
|
2013-04-12 19:32:25 -07:00
|
|
|
}
|
2013-06-23 18:33:35 -07:00
|
|
|
|
2017-09-23 23:59:26 -07:00
|
|
|
public static void trigger(final MagicGame game, final MagicPermanent perm, final MagicPermanentState state) {
|
|
|
|
game.executeTrigger(
|
|
|
|
MagicTriggerType.WhenBecomesState,
|
|
|
|
ChangeStateAction.Set(perm, state)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2013-04-12 19:32:25 -07:00
|
|
|
@Override
|
|
|
|
public void doAction(final MagicGame game) {
|
|
|
|
changed=permanent.hasState(state)!=set;
|
|
|
|
if (changed) {
|
|
|
|
if (set) {
|
|
|
|
permanent.setState(state);
|
2013-10-05 19:40:54 -07:00
|
|
|
game.executeTrigger(MagicTriggerType.WhenBecomesState, this);
|
2013-04-12 19:32:25 -07:00
|
|
|
} else {
|
|
|
|
permanent.clearState(state);
|
|
|
|
}
|
|
|
|
game.setStateCheckRequired();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void undoAction(final MagicGame game) {
|
|
|
|
if (changed) {
|
|
|
|
if (set) {
|
2013-06-23 18:33:35 -07:00
|
|
|
permanent.clearState(state);
|
2013-04-12 19:32:25 -07:00
|
|
|
} else {
|
|
|
|
permanent.setState(state);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|