mirror of
https://github.com/magefree/mage.git
synced 2026-01-09 20:32:06 -08:00
Emblems refactor to show emblems in Card/Token Viewer
This commit is contained in:
parent
d0f513cb7b
commit
f85c7e07ba
76 changed files with 3033 additions and 1245 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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|
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue