Remove use of card classes for duplicate cards. Remove set related information from being tied to card classes.

This commit is contained in:
JOAC69 2016-09-01 23:33:59 -05:00
parent 3c2189e7a1
commit e8230946af
32 changed files with 356 additions and 155 deletions

View file

@ -72,6 +72,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
protected String tokenDescriptor;
protected Rarity rarity;
protected boolean transformable;
protected Class<?> secondSideCardClazz;
protected Card secondSideCard;
protected boolean nightCard;
protected SpellAbility spellAbility;
@ -81,18 +82,15 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
protected boolean splitCard;
protected boolean morphCard;
public CardImpl(UUID ownerId, int cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
this(ownerId, String.valueOf(cardNumber), name, rarity, cardTypes, costs, SpellAbilityType.BASE);
public CardImpl(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs) {
this(ownerId, setInfo, cardTypes, costs, SpellAbilityType.BASE);
}
public CardImpl(UUID ownerId, String cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
this(ownerId, cardNumber, name, rarity, cardTypes, costs, SpellAbilityType.BASE);
}
public CardImpl(UUID ownerId, String cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs, SpellAbilityType spellAbilityType) {
this(ownerId, name);
this.rarity = rarity;
this.cardNumber = cardNumber;
public CardImpl(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs, SpellAbilityType spellAbilityType) {
this(ownerId, setInfo.getName());
this.rarity = setInfo.getRarity();
this.cardNumber = setInfo.getCardNumber();
this.expansionSetCode = setInfo.getExpansionSetCode();
this.cardType.addAll(Arrays.asList(cardTypes));
this.manaCost.load(costs);
setDefaultColor();
@ -108,7 +106,18 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
ability.setSourceId(this.getId());
abilities.add(ability);
}
this.usesVariousArt = Character.isDigit(this.getClass().getName().charAt(this.getClass().getName().length() - 1));
CardGraphicInfo graphicInfo = setInfo.getGraphicInfo();
if (graphicInfo != null) {
this.usesVariousArt = graphicInfo.getUsesVariousArt();
if (graphicInfo.getFrameColor() != null) {
this.frameColor = graphicInfo.getFrameColor().copy();
}
if (graphicInfo.getFrameStyle() != null) {
this.frameStyle = graphicInfo.getFrameStyle();
}
}
this.morphCard = false;
}
@ -141,7 +150,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
transformable = card.transformable;
if (transformable) {
secondSideCard = card.secondSideCard;
secondSideCardClazz = card.secondSideCardClazz;
nightCard = card.nightCard;
}
flipCard = card.flipCard;
@ -157,12 +166,12 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
this.abilities.setSourceId(objectId);
}
public static Card createCard(String name) {
public static Card createCard(String name, CardSetInfo setInfo) {
try {
return createCard(Class.forName(name));
return createCard(Class.forName(name), setInfo);
} catch (ClassNotFoundException ex) {
try {
return createCard(PluginClassloaderRegistery.forName(name));
return createCard(PluginClassloaderRegistery.forName(name), setInfo);
} catch (ClassNotFoundException ex2) {
// ignored
}
@ -171,10 +180,17 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
}
}
public static Card createCard(Class<?> clazz) {
public static Card createCard(Class<?> clazz, CardSetInfo setInfo) {
try {
Constructor<?> con = clazz.getConstructor(new Class[]{UUID.class});
Card card = (Card) con.newInstance(new Object[]{null});
Card card;
if (setInfo == null) {
Constructor<?> con = clazz.getConstructor(UUID.class);
card = (Card) con.newInstance(new Object[]{null});
}
else {
Constructor<?> con = clazz.getConstructor(UUID.class, CardSetInfo.class);
card = (Card) con.newInstance(null, setInfo);
}
card.build();
return card;
} catch (Exception e) {
@ -542,8 +558,24 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
}
@Override
public Card getSecondCardFace() {
return this.secondSideCard;
public final Card getSecondCardFace() {
if (secondSideCardClazz == null) {
return null;
}
if (secondSideCard != null) {
return secondSideCard;
}
List<ExpansionSet.SetCardInfo> cardInfo = Sets.findSet(expansionSetCode).findCardInfoByClass(secondSideCardClazz);
assert cardInfo.size() == 1; // should find 1 second side card
if (cardInfo.isEmpty()) {
return null;
}
ExpansionSet.SetCardInfo info = cardInfo.get(0);
return secondSideCard = createCard(secondSideCardClazz,
new CardSetInfo(info.getName(), expansionSetCode, info.getCardNumber(), info.getRarity(), info.getGraphicInfo()));
}
@Override