Redesigned handling of various art for cards.

This commit is contained in:
LevelX2 2012-11-27 15:24:29 +01:00
parent 96738632d1
commit 4b2e6a8bc0
15 changed files with 82 additions and 49 deletions

View file

@ -15,21 +15,21 @@ public class CardInfo {
private boolean twoFacedCard;
private boolean secondSide;
private boolean flipCard;
private boolean useCollectorId; // for building the image name (different images for the same card)
private boolean usesVariousArt;
public CardInfo(String name, String set, Integer collectorId, boolean useCollectorId, Integer type) {
this(name, set, collectorId, useCollectorId, type, false);
public CardInfo(String name, String set, Integer collectorId, boolean usesVariousArt, Integer type) {
this(name, set, collectorId, usesVariousArt, type, false);
}
public CardInfo(String name, String set, Integer collectorId, boolean useCollectorId, Integer type, boolean token) {
this(name, set, collectorId, useCollectorId, type, token, false, false);
public CardInfo(String name, String set, Integer collectorId, boolean usesVariousArt, Integer type, boolean token) {
this(name, set, collectorId, usesVariousArt, type, token, false, false);
}
public CardInfo(String name, String set, Integer collectorId, boolean useCollectorId, Integer type, boolean token, boolean twoFacedCard, boolean secondSide) {
public CardInfo(String name, String set, Integer collectorId, boolean usesVariousArt, Integer type, boolean token, boolean twoFacedCard, boolean secondSide) {
this.name = name;
this.set = set;
this.collectorId = collectorId;
this.useCollectorId = useCollectorId;
this.usesVariousArt = usesVariousArt;
this.type = type;
this.token = token;
this.twoFacedCard = twoFacedCard;
@ -44,6 +44,7 @@ public class CardInfo {
this.twoFacedCard = card.twoFacedCard;
this.secondSide = card.secondSide;
this.type = card.type;
this.usesVariousArt = card.usesVariousArt;
}
@Override
@ -153,8 +154,8 @@ public class CardInfo {
this.type = type;
}
public boolean useCollectorId() {
return useCollectorId;
public boolean getUsesVariousArt() {
return usesVariousArt;
}
}

View file

@ -210,7 +210,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
TFile file;
for (Card card : allCards) {
if (card.getCardNumber() > 0 && !card.getExpansionSetCode().isEmpty()) {
CardInfo url = new CardInfo(card.getName(), card.getExpansionSetCode(), card.getCardNumber(),Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1)),0 , false, card.canTransform(), card.isNightCard());
CardInfo url = new CardInfo(card.getName(), card.getExpansionSetCode(), card.getCardNumber(),card.getUsesVariousArt(),0 , false, card.canTransform(), card.isNightCard());
file = new TFile(CardImageUtils.getImagePath(url, imagesPath));
if (!file.exists()) {
return true;
@ -235,8 +235,8 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
for (Card card : allCards) {
if (card.getCardNumber() > 0 && !card.getExpansionSetCode().isEmpty()) {
String cardName = card.getName();
CardInfo url = new CardInfo(cardName, card.getExpansionSetCode(), card.getCardNumber(), Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1)), 0, false, card.canTransform(), card.isNightCard());
if (url.useCollectorId()) {
CardInfo url = new CardInfo(cardName, card.getExpansionSetCode(),card.getCardNumber(), card.getUsesVariousArt(), 0, false, card.canTransform(), card.isNightCard());
if (url.getUsesVariousArt()) {
url.setDownloadName(card.getClass().getName().replace(card.getClass().getPackage().getName() + ".", ""));
}
if (card.isFlipCard()) {
@ -248,7 +248,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
// it has the same expansion set code and card number as original one
// second side = true;
Card secondSide = card.getSecondCardFace();
url = new CardInfo(secondSide.getName(), card.getExpansionSetCode(), card.getCardNumber(), Character.isDigit(secondSide.getClass().getName().charAt(secondSide.getClass().getName().length()-1)), 0, false, card.canTransform(), true);
url = new CardInfo(secondSide.getName(), card.getExpansionSetCode(), card.getCardNumber(), card.getUsesVariousArt(), 0, false, card.canTransform(), true);
allCardsUrls.add(url);
}
} else {

View file

@ -54,10 +54,10 @@ public class ImageCache {
public BufferedImage apply(String key) {
try {
boolean thumbnail = false;
boolean useCollectorId = false;
if (key.endsWith("#useCardNumber")) {
useCollectorId = true;
key = key.replace("#useCardNumber", "");
boolean usesVariousArt = false;
if (key.endsWith("#usesVariousArt")) {
usesVariousArt = true;
key = key.replace("#usesVariousArt", "");
}
if (key.endsWith("#thumb")) {
thumbnail = true;
@ -71,7 +71,7 @@ public class ImageCache {
Integer type = Integer.parseInt(m.group(3));
Integer collectorId = Integer.parseInt(m.group(4));
CardInfo info = new CardInfo(name, set, collectorId, useCollectorId, type);
CardInfo info = new CardInfo(name, set, collectorId, usesVariousArt, type);
if (collectorId == 0) {
info.setToken(true);
@ -139,8 +139,8 @@ public class ImageCache {
public static BufferedImage getThumbnail(CardView card) {
String key = getKey(card) + "#thumb";
if (card.useCardNumber()) {
key += "#useCardNumber";
if (card.getUsesVariousArt()) {
key += "#usesVariousArt";
}
//log.debug("#key: " + key);
return getImage(key);
@ -148,8 +148,8 @@ public class ImageCache {
public static BufferedImage getImageOriginal(CardView card) {
String key = getKey(card);
if (card.useCardNumber()) {
key += "#useCardNumber";
if (card.getUsesVariousArt()) {
key += "#usesVariousArt";
}
//log.debug("#key: " + key);
return getImage(key);

View file

@ -136,7 +136,7 @@ public class CardImageUtils {
String type = card.getType() != 0 ? " " + Integer.toString(card.getType()) : "";
String name = card.getName().replace(":", "");
if (card.useCollectorId()) {
if (card.getUsesVariousArt()) {
imageName = name + "." + card.getCollectorId() + ".full.jpg";
} else {
imageName = name + type + ".full.jpg";

View file

@ -47,7 +47,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Mode;
import mage.game.permanent.PermanentCard;
/**
* @author BetaSteward_at_googlemail.com
@ -87,10 +86,7 @@ public class CardView extends SimpleCardView {
}
public CardView(Card card) {
super(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.isFaceDown(),
(card instanceof PermanentCard ?
Character.isDigit(((PermanentCard) card).getCard().getClass().getName().charAt(((PermanentCard) card).getCard().getClass().getName().length()-1))
:Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1))));
super(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.isFaceDown(), card.getUsesVariousArt());
// no information available for face down cards
if (this.faceDown) {

View file

@ -47,7 +47,7 @@ public class ExileView extends SimpleCardsView {
this.name = exileZone.getName();
this.id = exileZone.getId();
for (Card card: exileZone.getCards(game)) {
this.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.isFaceDown(), Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1))));
this.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.isFaceDown(), card.getUsesVariousArt()));
}
}

View file

@ -46,7 +46,7 @@ public class LookedAtView implements Serializable {
public LookedAtView(String name, Cards cards, Game game) {
this.name = name;
for (Card card: cards.getCards(game)) {
this.cards.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1)), card.isFaceDown()));
this.cards.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.getUsesVariousArt(), card.isFaceDown()));
}
}

View file

@ -72,7 +72,7 @@ public class PlayerView implements Serializable {
this.isActive = (player.getId().equals(state.getActivePlayerId()));
this.hasLeft = player.hasLeft();
for (Card card: player.getGraveyard().getCards(game)) {
graveyard.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1)), card.isFaceDown()));
graveyard.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.getUsesVariousArt(), card.isFaceDown()));
}
for (Permanent permanent: state.getBattlefield().getAllPermanents()) {
if (showInBattlefield(permanent, state)) {

View file

@ -45,7 +45,7 @@ public class RevealedView implements Serializable {
public RevealedView(String name, Cards cards, Game game) {
this.name = name;
for (Card card: cards.getCards(game)) {
this.cards.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1)), card.isFaceDown()));
this.cards.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.getUsesVariousArt(), card.isFaceDown()));
}
}

View file

@ -40,14 +40,14 @@ public class SimpleCardView implements Serializable {
protected String expansionSetCode;
protected int cardNumber;
protected boolean faceDown;
protected boolean useCardNumber; // for building the image name (different images for the same card)
protected boolean usesVariousArt;
public SimpleCardView(UUID id, String expansionSetCode, int cardNumber, boolean faceDown, boolean useCardNumber) {
public SimpleCardView(UUID id, String expansionSetCode, int cardNumber, boolean faceDown, boolean usesVariousArt) {
this.id = id;
this.expansionSetCode = expansionSetCode;
this.cardNumber = cardNumber;
this.faceDown = faceDown;
this.useCardNumber = useCardNumber;
this.usesVariousArt = usesVariousArt;
}
public UUID getId() {
@ -66,7 +66,7 @@ public class SimpleCardView implements Serializable {
return faceDown;
}
public boolean useCardNumber() {
return useCardNumber;
public boolean getUsesVariousArt() {
return usesVariousArt;
}
}

View file

@ -44,7 +44,7 @@ public class SimpleCardsView extends LinkedHashMap<UUID, SimpleCardView> {
public SimpleCardsView(Collection<Card> cards) {
for (Card card: cards) {
this.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.isFaceDown(), Character.isDigit(card.getClass().getName().charAt(card.getClass().getName().length()-1))));
this.put(card.getId(), new SimpleCardView(card.getId(), card.getExpansionSetCode(), card.getCardNumber(), card.isFaceDown(), card.getUsesVariousArt()));
}
}

View file

@ -28,6 +28,8 @@
package mage.cards;
import java.util.List;
import java.util.UUID;
import mage.Constants.Rarity;
import mage.Constants.Zone;
import mage.MageObject;
@ -37,9 +39,6 @@ import mage.abilities.SpellAbility;
import mage.game.Game;
import mage.watchers.Watcher;
import java.util.List;
import java.util.UUID;
public interface Card extends MageObject {
public UUID getOwnerId();
@ -101,6 +100,13 @@ public interface Card extends MageObject {
public void build();
public void setUsesVariousArt(boolean usesVariousArt);
/**
*
* @return true if there exists various art images for this card
*/
public boolean getUsesVariousArt();
@Override
public Card copy();
}

View file

@ -28,6 +28,8 @@
package mage.cards;
import java.lang.reflect.Constructor;
import java.util.*;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.Constants.Zone;
@ -44,8 +46,6 @@ import mage.game.stack.Spell;
import mage.watchers.Watcher;
import org.apache.log4j.Logger;
import java.lang.reflect.Constructor;
import java.util.*;
public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T> implements Card {
private static final long serialVersionUID = 1L;
@ -65,6 +65,7 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
protected boolean flipCard;
protected int zoneChangeCounter = 1;
protected Map<String, String> info;
protected boolean usesVariousArt = false;
public CardImpl(UUID ownerId, int cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
this(ownerId, name);
@ -72,10 +73,13 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
this.cardNumber = cardNumber;
this.cardType.addAll(Arrays.asList(cardTypes));
this.manaCost.load(costs);
if (cardType.contains(CardType.LAND))
if (cardType.contains(CardType.LAND)) {
addAbility(new PlayLandAbility(name));
else
}
else {
addAbility(new SpellAbility(manaCost, name));
}
this.usesVariousArt = Character.isDigit(this.getClass().getName().charAt(this.getClass().getName().length()-1));
}
protected CardImpl(UUID ownerId, String name) {
@ -110,6 +114,7 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
info = new HashMap<String, String>();
info.putAll(card.info);
}
usesVariousArt = card.usesVariousArt;
}
@Override
@ -196,8 +201,9 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
public SpellAbility getSpellAbility() {
if (spellAbility == null) {
for (Ability ability : abilities.getActivatedAbilities(Zone.HAND)) {
if (ability instanceof SpellAbility)
if (ability instanceof SpellAbility) {
spellAbility = (SpellAbility) ability;
}
}
}
return spellAbility;
@ -284,10 +290,12 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
game.getExile().getPermanentExile().add(this);
break;
case LIBRARY:
if (flag)
if (flag) {
game.getPlayer(ownerId).getLibrary().putOnTop(this, game);
else
}
else {
game.getPlayer(ownerId).getLibrary().putOnBottom(this, game);
}
break;
case BATTLEFIELD:
PermanentCard permanent = new PermanentCard(this, ownerId);
@ -297,8 +305,9 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
game.applyEffects();
permanent.entersBattlefield(sourceId, game);
game.applyEffects();
if (flag)
if (flag) {
permanent.setTapped(true);
}
event.setTarget(permanent);
break;
default:
@ -483,4 +492,14 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T>
@Override
public void build() {}
@Override
public void setUsesVariousArt(boolean usesVariousArt) {
this.usesVariousArt = usesVariousArt;
}
@Override
public boolean getUsesVariousArt() {
return usesVariousArt;
}
}

View file

@ -114,6 +114,7 @@ public class PermanentCard extends PermanentImpl<PermanentCard> {
this.expansionSetCode = card.getExpansionSetCode();
this.rarity = card.getRarity();
this.cardNumber = card.getCardNumber();
this.usesVariousArt = card.getUsesVariousArt();
canTransform = card.canTransform();
if (canTransform) {

View file

@ -426,6 +426,16 @@ public class Spell<T extends Spell<T>> implements StackObject, Card {
card.setCardNumber(cid);
}
@Override
public boolean getUsesVariousArt() {
return card.getUsesVariousArt();
}
@Override
public void setUsesVariousArt(boolean usesVariousArt) {
card.setUsesVariousArt(usesVariousArt);
}
@Override
public List<Mana> getMana() {
return card.getMana();