package magic.model.action;
import magic.model.MagicGame;
import magic.model.event.MagicEvent;
import magic.model.stack.MagicItemOnStack;
import magic.model.target.MagicTarget;
import magic.model.target.MagicTargetNone;
public class ChangeTargetAction extends MagicAction {
private final MagicItemOnStack item;
private final MagicTarget target;
private Object oldTarget = MagicTargetNone.getInstance();
public ChangeTargetAction(final MagicItemOnStack aItem,final MagicTarget aTarget) {
item = aItem;
target = aTarget;
}
@Override
public void doAction(final MagicGame game) {
final MagicEvent event = item.getEvent();
if (game.isLegalTarget(event.getPlayer(), event.getSource(), event.getTargetChoice(), target)) {
final int idx = event.getTargetChoiceResultIndex();
oldTarget = item.getChoiceResults()[idx];
item.getChoiceResults()[idx] = target;
}
}
@Override
public void undoAction(final MagicGame game) {
if (oldTarget != MagicTargetNone.getInstance()) {
final int idx = item.getEvent().getTargetChoiceResultIndex();
item.getChoiceResults()[idx] = oldTarget;
}
}
@Override
public String toString() {
return getClass().getSimpleName()+" ("+item.getName()+','+target.getName()+')';
}
}