package magic.model.choice;
import java.util.ArrayList;
import java.util.List;
import magic.model.MagicCard;
import magic.model.MagicCopyMap;
import magic.model.MagicCopyable;
import magic.model.MagicGame;
import magic.model.MagicMappable;
import magic.model.MurmurHash3;
@SuppressWarnings("serial")
public class MagicCardChoiceResult extends ArrayList<MagicCard> implements MagicMappable<MagicCardChoiceResult>, MagicCopyable {
MagicCardChoiceResult(final MagicCard[] cards) {
for (final MagicCard card : cards) {
if (card != null) {
add(card);
}
}
}
MagicCardChoiceResult() {}
private MagicCardChoiceResult(final MagicCopyMap copyMap, final List<MagicCard> cardList) {
for (final MagicCard card : cardList) {
add(copyMap.copy(card));
}
}
@Override
public MagicCardChoiceResult copy(final MagicCopyMap copyMap) {
return new MagicCardChoiceResult(copyMap, this);
}
@Override
public MagicCardChoiceResult map(final MagicGame game) {
final MagicCardChoiceResult result=new MagicCardChoiceResult();
for (final MagicCard card : this) {
result.add(card.map(game));
}
return result;
}
@Override
public String toString() {
final StringBuilder buffer=new StringBuilder();
for (final MagicCard card : this) {
if (buffer.length()>0) {
buffer.append(", ");
}
buffer.append(card.getName());
}
return buffer.toString();
}
@Override
public long getId() {
final long[] keys = new long[size()];
int idx = 0;
for (final MagicCard card : this) {
keys[idx] = card.getStateId();
idx++;
}
return MurmurHash3.hash(keys);
}
}