Emblems refactor to show emblems in Card/Token Viewer

This commit is contained in:
spjspj 2017-05-14 13:43:18 +10:00
parent d0f513cb7b
commit f85c7e07ba
76 changed files with 3033 additions and 1245 deletions

View file

@ -63,8 +63,11 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import mage.client.util.CardsViewUtil;
import mage.game.command.Emblem;
import mage.game.permanent.PermanentToken;
import mage.game.permanent.token.Token;
import mage.view.EmblemView;
import mage.view.PermanentView;
import org.mage.plugins.card.images.CardDownloadData;
import static org.mage.plugins.card.images.DownloadPictures.getTokenCardUrls;
@ -216,7 +219,8 @@ public class MageBook extends JComponent {
if (showCardsOrTokens) {
showCards();
} else {
showTokens();
int numTokens = showTokens();
showEmblems(numTokens);
}
}
@ -249,13 +253,13 @@ public class MageBook extends JComponent {
jLayeredPane.repaint();
}
public void showTokens() {
public int showTokens() {
jLayeredPane.removeAll();
addLeftRightPageButtons();
List<Token> tokens = getTokens(currentPage, currentSet);
int size = tokens.size();
if (tokens != null && tokens.size() > 0) {
Rectangle rectangle = new Rectangle();
rectangle.translate(OFFSET_X, OFFSET_Y);
@ -278,6 +282,53 @@ public class MageBook extends JComponent {
jLayeredPane.repaint();
}
return tokens.size();
}
public void showEmblems(int numTokens) {
List<Emblem> emblems = getEmblems(currentPage, currentSet, numTokens);
int size = emblems.size();
System.out.println ("Size of origins in " + currentSet + " = " + emblems.size());
if (emblems != null && emblems.size() > 0) {
Rectangle rectangle = new Rectangle();
rectangle.translate(OFFSET_X, OFFSET_Y);
// calculate the x offset of the second (right) page
int second_page_x = (conf.WIDTH - 2 * LEFT_RIGHT_PAGES_WIDTH)
- (cardDimensions.frameWidth + CardPosition.GAP_X) * conf.CARD_COLUMNS + CardPosition.GAP_X - OFFSET_X;
// Already have numTokens tokens presented. Appending the emblems to the end of these.
numTokens = numTokens % conf.CARDS_PER_PAGE;
if (numTokens < conf.CARDS_PER_PAGE / 2) {
for (int z = 0; z < numTokens && z < conf.CARDS_PER_PAGE / 2; z++) {
rectangle = CardPosition.translatePosition(z, rectangle, conf);
}
} else {
rectangle.setLocation(second_page_x, OFFSET_Y);
for (int z = 0; z < numTokens - conf.CARDS_PER_PAGE / 2; z++) {
rectangle = CardPosition.translatePosition(z, rectangle, conf);
}
}
int lastI = 0;
for (int i = 0; i < size && i + numTokens < conf.CARDS_PER_PAGE / 2; i++) {
Emblem emblem = emblems.get(i);
addEmblem(emblem, bigCard, null, rectangle);
rectangle = CardPosition.translatePosition(i + numTokens, rectangle, conf);
lastI++;
}
if (size + numTokens > conf.CARDS_PER_PAGE / 2) {
for (int i = lastI; i < size && i + numTokens < conf.CARDS_PER_PAGE; i++) {
Emblem emblem = emblems.get(i);
addEmblem(emblem, bigCard, null, rectangle);
rectangle = CardPosition.translatePosition(i + numTokens - conf.CARDS_PER_PAGE / 2, rectangle, conf);
}
}
jLayeredPane.repaint();
}
}
private void addCard(CardView card, BigCard bigCard, UUID gameId, Rectangle rectangle) {
@ -314,6 +365,11 @@ public class MageBook extends JComponent {
cardImg.setCardBounds(rectangle.x, rectangle.y, cardDimensions.frameWidth, cardDimensions.frameHeight);
}
private void addEmblem(Emblem emblem, BigCard bigCard, UUID gameId, Rectangle rectangle) {
CardView cardView = new CardView(new EmblemView(emblem));
addCard(cardView, bigCard, gameId, rectangle);
}
private List<CardInfo> getCards(int page, String set) {
CardCriteria criteria = new CardCriteria();
criteria.setCodes(set);
@ -333,17 +389,22 @@ public class MageBook extends JComponent {
private List<Token> getTokens(int page, String set) {
ArrayList<CardDownloadData> allTokens = getTokenCardUrls();
ArrayList<Token> tokens = new ArrayList<>();
for (CardDownloadData token : allTokens) {
if (token.getSet().equals(set)) {
try {
String className = token.getName();
className = className.replaceAll("[^a-zA-Z0-9]", "");
className = className + "Token";
className = "mage.game.permanent.token." + className + "Token";
if (token.getTokenClassName() != null && token.getTokenClassName().length() > 0) {
className = token.getTokenClassName();
if (token.getTokenClassName().toLowerCase().matches(".*token.*")) {
className = token.getTokenClassName();
className = "mage.game.permanent.token." + className;
} else if (token.getTokenClassName().toLowerCase().matches(".*emblem.*")) {
continue;
}
}
Class<?> c = Class.forName("mage.game.permanent.token." + className);
Class<?> c = Class.forName(className);
Constructor<?> cons = c.getConstructor();
Object newToken = cons.newInstance();
if (newToken != null && newToken instanceof mage.game.permanent.token.Token) {
@ -379,6 +440,62 @@ public class MageBook extends JComponent {
return tokens.subList(start, end);
}
private List<Emblem> getEmblems(int page, String set, int numTokens) {
ArrayList<CardDownloadData> allEmblems = getTokenCardUrls();
ArrayList<Emblem> emblems = new ArrayList<>();
for (CardDownloadData emblem : allEmblems) {
if (emblem.getSet().equals(set)) {
try {
String className = emblem.getName();
if (emblem.getTokenClassName() != null && emblem.getTokenClassName().length() > 0) {
if (emblem.getTokenClassName().toLowerCase().matches(".*emblem.*")) {
className = emblem.getTokenClassName();
className = "mage.game.command.emblems." + className;
}
} else {
continue;
}
Class<?> c = Class.forName(className);
Constructor<?> cons = c.getConstructor();
Object newEmblem = cons.newInstance();
if (newEmblem != null && newEmblem instanceof mage.game.command.Emblem) {
((Emblem) newEmblem).setExpansionSetCodeForImage(set);
emblems.add((Emblem) newEmblem);
}
} catch (ClassNotFoundException ex) {
// Swallow exception
} catch (NoSuchMethodException ex) {
// Swallow exception
} catch (SecurityException ex) {
// Swallow exception
} catch (InstantiationException ex) {
// Swallow exception
} catch (IllegalAccessException ex) {
// Swallow exception
} catch (IllegalArgumentException ex) {
// Swallow exception
} catch (InvocationTargetException ex) {
// Swallow exception
}
}
}
int start = 0;
int end = emblems.size();
if ((page + 1) * conf.CARDS_PER_PAGE < numTokens + emblems.size()) {
end = (page + 1) * conf.CARDS_PER_PAGE - numTokens;
pageRight.setVisible(true);
}
if (emblems.size() > conf.CARDS_PER_PAGE) {
pageLeft.setVisible(true);
pageRight.setVisible(true);
}
return emblems.subList(start, end);
}
private ImagePanel getImagePanel(String filename, ImagePanelStyle type) {
try {
InputStream is = this.getClass().getResourceAsStream(filename);

View file

@ -45,43 +45,45 @@
#|Generate|TOK:PTC|Wolf||
#|Generate|TOK:PTC|Wurm||
#|Generate|TOK:WMCQ|Angel||
|Generate|EMBLEM!:AKH|Emblem Gideon||
|Generate|EMBLEM!:BFZ|Emblem Gideon||
|Generate|EMBLEM!:BFZ|Emblem Kiora||
|Generate|EMBLEM!:BFZ|Emblem Nixilis||
|Generate|EMBLEM!:C14|Emblem Daretti|
|Generate|EMBLEM!:C14|Emblem Nixilis|
|Generate|EMBLEM!:C14|Emblem Teferi|
|Generate|EMBLEM!:C16|Emblem Daretti||
|Generate|EMBLEM!:CNS|Emblem Dack Fayden||Emblem Dack|
|Generate|EMBLEM!:DTK|Emblem Narset||
|Generate|EMBLEM!:EMA|Emblem Dack||
|Generate|EMBLEM!:EMN|Emblem Liliana||
|Generate|EMBLEM!:EMN|Emblem Tamiyo||
|Generate|EMBLEM!:KLD|Emblem Chandra||
|Generate|EMBLEM!:KLD|Emblem Dovin||
|Generate|EMBLEM!:KLD|Emblem Nissa||
|Generate|EMBLEM!:KTK|Emblem Sarkhan||
|Generate|EMBLEM!:KTK|Emblem Sorin||
|Generate|EMBLEM!:M15|Emblem Ajani||
|Generate|EMBLEM!:M15|Emblem Garruk||
|Generate|EMBLEM!:MM3|Emblem Domri||
|Generate|EMBLEM!:ORI|Emblem Chandra||
|Generate|EMBLEM!:ORI|Emblem Jace||
|Generate|EMBLEM!:ORI|Emblem Liliana||
|Generate|EMBLEM!:SOI|Emblem Arlinn||
|Generate|EMBLEM!:SOI|Emblem Jace||
|Generate|EMBLEM-:M13|Liliana of the Dark Realms||Emblem Liliana|
|Generate|EMBLEM-:THS|Elspeth, Suns Champion||Emblem Elspeth|
|Generate|EMBLEM:AVR|Tamiyo, the Moon Sage||Emblem Tamiyo|
|Generate|EMBLEM:BNG|Kiora, the Crashing Wave||Emblem Kiora|
|Generate|EMBLEM:DDI|Koth of the Hammer||Emblem Koth|
|Generate|EMBLEM:DDI|Venser, the Sojourner||Emblem Venser|
|Generate|EMBLEM:DKA|Sorin, Lord of Innistrad||Emblem Sorin|
|Generate|EMBLEM:GTC|Domri Rade||Emblem Domri|
|Generate|EMBLEM:M14|Garruk, Caller of Beasts||Emblem Garruk|
|Generate|EMBLEM:M14|Liliana of the Dark Realms||Emblem Liliana|
|Generate|EMBLEM:MMA|Elspeth, Knight Errant||Emblem Elspeth|
|Generate|EMBLEM!:AKH|Emblem Gideon|||GideonOfTheTrialsEmblem|
|Generate|EMBLEM!:BFZ|Emblem Gideon|||GideonAllyOfZendikarEmblem|
|Generate|EMBLEM!:BFZ|Emblem Kiora|||KioraMasterOfTheDepthsEmblem|
|Generate|EMBLEM!:BFZ|Emblem Nixilis|||ObNixilisReignitedEmblem|
|Generate|EMBLEM!:C14|Emblem Daretti|||DarettiScrapSavantEmblem|
|Generate|EMBLEM!:C14|Emblem Daretti||Emblem Daretti|DarettiScrapSavantEmblem|
|Generate|EMBLEM!:C14|Emblem Nixilis|||ObNixilisOfTheBlackOathEmblem|
|Generate|EMBLEM!:C14|Emblem Teferi|||TeferiTemporalArchmageEmblem|
|Generate|EMBLEM!:C16|Emblem Daretti|||DarettiScrapSavantEmblem|
|Generate|EMBLEM!:CNS|Emblem Dack Fayden||Emblem Dack|DackFaydenEmblem|
|Generate|EMBLEM!:DTK|Emblem Narset|||NarsetTranscendentEmblem|
|Generate|EMBLEM!:EMA|Emblem Dack Fayden||Emblem Dack|DackFaydenEmblem|
|Generate|EMBLEM!:EMN|Emblem Liliana|||LilianaTheLastHopeEmblem|
|Generate|EMBLEM!:EMN|Emblem Tamiyo|||TamiyoFieldResearcherEmblem|
|Generate|EMBLEM!:KLD|Emblem Chandra|||ChandraTorchOfDefianceEmblem|
|Generate|EMBLEM!:KLD|Emblem Dovin|||DovinBaanEmblem|
|Generate|EMBLEM!:KLD|Emblem Nissa|||NissaVitalForceEmblem|
|Generate|EMBLEM!:KLD|Emblem Tezzeret|||TezzeretTheSchemerEmblem|
|Generate|EMBLEM!:KTK|Emblem Sarkhan|||SarkhanTheDragonspeakerEmblem|
|Generate|EMBLEM!:KTK|Emblem Sorin|||SorinSolemnVisitorEmblem|
|Generate|EMBLEM!:M15|Emblem Ajani|||AjaniSteadfastEmblem|
|Generate|EMBLEM!:M15|Emblem Garruk|||GarrukApexPredatorEmblem|
|Generate|EMBLEM!:MM3|Emblem Domri|||DomriRadeEmblem|
|Generate|EMBLEM!:ORI|Emblem Chandra|||ChandraRoaringFlameEmblem|
|Generate|EMBLEM!:ORI|Emblem Jace|||JaceTelepathUnboundEmblem|
|Generate|EMBLEM!:ORI|Emblem Liliana|||LilianaDefiantNecromancerEmblem|
|Generate|EMBLEM!:SOI|Emblem Arlinn|||ArlinnEmbracedByTheMoonEmblem|
|Generate|EMBLEM!:SOI|Emblem Jace|||JaceUnravelerOfSecretsEmblem|
|Generate|EMBLEM-:THS|Elspeth, Suns Champion||Emblem Elspeth|ElspethSunsChampionEmblem|
|Generate|EMBLEM:AVR|Tamiyo, the Moon Sage||Emblem Tamiyo|TamiyoTheMoonSageEmblem|
|Generate|EMBLEM:BNG|Kiora, the Crashing Wave||Emblem Kiora|KioraEmblem|
|Generate|EMBLEM:DDI|Koth of the Hammer||Emblem Koth|KothOfTheHammerEmblem|
|Generate|EMBLEM:DDI|Venser, the Sojourner||Emblem Venser|VenserTheSojournerEmblem|
|Generate|EMBLEM:DKA|Sorin, Lord of Innistrad||Emblem Sorin|SorinLordOfInnistradEmblem|
|Generate|EMBLEM:GTC|Domri Rade||Emblem Domri|DomriRadeEmblem|
|Generate|EMBLEM:M13|Liliana of the Dark Realms||Emblem Liliana|LilianaOfTheDarkRealmsEmblem|
|Generate|EMBLEM:M14|Garruk, Caller of Beasts||Emblem Garruk|GarrukCallerOfBeastsEmblem|
|Generate|EMBLEM:M14|Liliana of the Dark Realms||Emblem Liliana|LilianaOfTheDarkRealmsEmblem|
|Generate|EMBLEM:MMA|Elspeth, Knight Errant||Emblem Elspeth|ElspethKnightErrantEmblem|
|Generate|TOK:10E|Ape|||PongifyApeToken|
|Generate|TOK:10E|Dragon|||DragonToken2|
|Generate|TOK:10E|Goblin|||GoblinToken|
@ -242,7 +244,6 @@
|Generate|TOK:C13|Thopter|||ThopterToken|
|Generate|TOK:C13|Thrull|||ThrullToken|
|Generate|TOK:C13|Zombie|||ZombieToken|
|Generate|TOK:C13|Faerie|||CloudSpriteToken|
|Generate|TOK:C14|Angel|||AngelToken|
|Generate|TOK:C14|Ape|||PongifyApeToken|
|Generate|TOK:C14|Beast|1||BeastToken|
@ -303,7 +304,6 @@
|Generate|TOK:C15|Spirit|2||TeysaEnvoyOfGhostsToken|
|Generate|TOK:C15|Wolf|||WolfToken|
|Generate|TOK:C15|Zombie|||ZombieToken|
|Generate|TOK:C15|Land Mine|||LandMineToken|
|Generate|TOK:C16|Beast||
|Generate|TOK:C16|Bird|1|
|Generate|TOK:C16|Bird|2|
@ -367,7 +367,6 @@
|Generate|TOK:CNS|Ogre||
|Generate|TOK:CNS|Spirit|||SpiritWhiteToken|
|Generate|TOK:CNS|Squirrel|||SquirrelToken|
|Generate|TOK:CNS|Wall|||WallToken|
|Generate|TOK:CNS|Wolf|||WolfToken|
|Generate|TOK:CNS|Zombie|||ZombieToken|
|Generate|TOK:CON|Angel|||AngelToken|