package magic.model.action;
import magic.ai.ArtificialScoringSystem;
import magic.model.MagicCard;
import magic.model.MagicGame;
import magic.model.MagicLocationType;
import magic.model.MagicPlayer;
public class RemoveCardAction extends MagicAction {
private final MagicCard card;
private final MagicLocationType locationType;
private int index;
public RemoveCardAction(final MagicCard card,final MagicLocationType locationType) {
this.card=card;
this.locationType=locationType;
}
@Override
public void doAction(final MagicGame game) {
final MagicPlayer owner = card.getOwner();
assert owner == game.getPlayer(0) || owner == game.getPlayer(1) : card + " does not belong to this MagicGame";
switch (locationType) {
case OwnersHand:
index=owner.removeCardFromHand(card);
if (index >= 0) {
setScore(owner,-ArtificialScoringSystem.getCardScore(card));
}
break;
case OwnersLibrary:
index=owner.getLibrary().removeCard(card);
break;
case Graveyard:
index=owner.getGraveyard().removeCard(card);
break;
case Exile:
index=owner.getExile().removeCard(card);
break;
}
game.setStateCheckRequired();
}
@Override
public void undoAction(final MagicGame game) {
//do nothing if index is invalid
if (index < 0) {
return;
}
final MagicPlayer owner=card.getOwner();
switch (locationType) {
case OwnersHand:
owner.addCardToHand(card,index);
break;
case OwnersLibrary:
owner.getLibrary().add(index,card);
break;
case Graveyard:
owner.getGraveyard().add(index,card);
break;
case Exile:
owner.getExile().add(index,card);
break;
}
}
@Override
public String toString() {
return getClass().getSimpleName()+" ("+card.getName()+")";
}
}