package magic.model.action;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicPermanentState;
import magic.model.mstatic.MagicStatic;
import magic.model.trigger.MagicTriggerType;
import java.util.Collections;
import java.util.Collection;
public class TransformAction extends MagicAction {
public final MagicPermanent permanent;
private Collection<MagicStatic> oldStatics = Collections.emptyList();
private Collection<MagicStatic> newStatics = Collections.emptyList();
public TransformAction(final MagicPermanent aPermanent) {
permanent = aPermanent;
}
@Override
public void doAction(final MagicGame game) {
if (permanent.isValid() && permanent.isDoubleFaced()) {
oldStatics = permanent.getStatics();
final ChangeStateAction act = permanent.isTransformed() ?
ChangeStateAction.Clear(permanent, MagicPermanentState.Transformed) :
ChangeStateAction.Set(permanent, MagicPermanentState.Transformed);
game.doAction(act);
// update static abilities
newStatics = permanent.getStatics();
game.removeStatics(permanent, oldStatics);
game.addStatics(permanent, newStatics);
// update and execute transform triggers
game.update();
game.executeTrigger(MagicTriggerType.WhenTransforms, permanent);
}
}
@Override
public void undoAction(final MagicGame game) {
game.removeStatics(permanent, newStatics);
game.addStatics(permanent, oldStatics);
}
}