diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index ff0a5a5d5c9..81ab2b910c9 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -964,7 +964,7 @@ public class FDeckChooser extends FScreen { public void run(final Integer numOpponents) { if (numOpponents == null) { return; } List deckTypes=null; - if(!FModel.isdeckGenMatrixLoaded()) { + if(FModel.isdeckGenMatrixLoaded()) { deckTypes=Arrays.asList(new DeckType[] { DeckType.CUSTOM_DECK, DeckType.PRECONSTRUCTED_DECK, diff --git a/forge-gui-mobile/src/forge/deck/FDeckViewer.java b/forge-gui-mobile/src/forge/deck/FDeckViewer.java index 41f3d2cc729..ea38152df37 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckViewer.java +++ b/forge-gui-mobile/src/forge/deck/FDeckViewer.java @@ -1,14 +1,10 @@ package forge.deck; import forge.Forge; -import forge.GuiBase; import forge.assets.FImage; import forge.assets.FSkin; import forge.assets.FSkinImage; import forge.assets.FTextureRegionImage; -import forge.deck.CardPool; -import forge.deck.Deck; -import forge.deck.DeckSection; import forge.item.PaperCard; import forge.itemmanager.CardManager; import forge.itemmanager.ItemManagerConfig; diff --git a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java index f2892a6af4b..20ec1ed293a 100644 --- a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java @@ -983,7 +983,7 @@ public abstract class ItemManager extends FContainer im if (cbxSortOptions != null) { return cbxSortOptions.getWidth(); } - if(filters.size()==0){ + if(filters.isEmpty()){ return 0f; } return filters.get(filters.size() - 1).getWidget().getWidth(); diff --git a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java index d0d969b76f9..a17d1219e0a 100644 --- a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java +++ b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java @@ -27,37 +27,39 @@ public final class CardRelationMatrixGenerator { public static HashMap>>> cardPools = new HashMap<>(); - /** Try to load matrix .dat files, otherwise check for deck folders and build .dat, otherwise return false **/ public static boolean initialize(){ - String format=FModel.getFormats().getStandard().getName(); - HashMap>> standardMap = CardThemedMatrixIO.loadMatrix(format); - if(standardMap==null&&CardThemedMatrixIO.getMatrixFolder(format).exists()){ - standardMap=initializeFormat(FModel.getFormats().getStandard()); - CardThemedMatrixIO.saveMatrix(format,standardMap); - }else if(standardMap==null && !CardThemedMatrixIO.getMatrixFolder(format).exists()){ - return false; - } - cardPools.put(format,standardMap); + List formatStrings = new ArrayList<>(); + formatStrings.add(FModel.getFormats().getStandard().getName()); + formatStrings.add(FModel.getFormats().getModern().getName()); + formatStrings.add(DeckFormat.Commander.toString()); - format=FModel.getFormats().getModern().getName(); - HashMap>> modernMap = CardThemedMatrixIO.loadMatrix(format); - if(modernMap==null&&CardThemedMatrixIO.getMatrixFolder(format).exists()){ - modernMap=initializeFormat(FModel.getFormats().getModern()); - CardThemedMatrixIO.saveMatrix(format,modernMap); - }else if (standardMap==null && !CardThemedMatrixIO.getMatrixFolder(format).exists()){ - return false; + for (String formatString : formatStrings){ + if(!initializeFormat(formatString)){ + return false; + } } - cardPools.put(format,modernMap); - format=DeckFormat.Commander.toString(); - HashMap>> commanderMap = CardThemedMatrixIO.loadMatrix(format); - if(commanderMap==null&&CardThemedMatrixIO.getMatrixFolder(format).exists()){ - commanderMap=initializeCommanderFormat(); - CardThemedMatrixIO.saveMatrix(format,commanderMap); - }else if(standardMap==null && !CardThemedMatrixIO.getMatrixFolder(format).exists()){ - return false; + return true; + } + + /** Try to load matrix .dat files, otherwise check for deck folders and build .dat, otherwise return false **/ + public static boolean initializeFormat(String format){ + HashMap>> formatMap = CardThemedMatrixIO.loadMatrix(format); + if(formatMap==null) { + if (CardThemedMatrixIO.getMatrixFolder(format).exists()) { + if(format.equals(FModel.getFormats().getStandard().getName())){ + formatMap=initializeFormat(FModel.getFormats().getStandard()); + }else if(format.equals(FModel.getFormats().getModern().getName())){ + formatMap=initializeFormat(FModel.getFormats().getModern()); + }else{ + formatMap=initializeCommanderFormat(); + } + CardThemedMatrixIO.saveMatrix(format, formatMap); + } else { + return false; + } } - cardPools.put(format,commanderMap); + cardPools.put(format, formatMap); return true; } @@ -74,8 +76,8 @@ public final class CardRelationMatrixGenerator { Map cardIntegerMap = new HashMap<>(); Map integerCardMap = new HashMap<>(); for (int i=0; i>> initializeCommanderFormat(){ - IStorage decks = new StorageImmediatelySerialized("Generator", new DeckStorage(new File(ForgeConstants.DECK_GEN_DIR+ForgeConstants.PATH_SEPARATOR+DeckFormat.Commander.toString()), + IStorage decks = new StorageImmediatelySerialized("Generator", + new DeckStorage(new File(ForgeConstants.DECK_GEN_DIR,DeckFormat.Commander.toString()), ForgeConstants.DECK_GEN_DIR, false), true); + //get all cards final Iterable cards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCards() , Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND_NOT_WASTES), PaperCard.FN_GET_RULES)); List cardList = Lists.newArrayList(cards); @@ -144,11 +148,13 @@ public final class CardRelationMatrixGenerator { Map integerCardMap = new HashMap<>(); Map legendIntegerMap = new HashMap<>(); Map integerLegendMap = new HashMap<>(); + //generate lookups for cards to link card names to matrix columns for (int i=0; i legends = Lists.newArrayList(Iterables.filter(cardList,Predicates.compose( new Predicate() { @Override @@ -157,41 +163,25 @@ public final class CardRelationMatrixGenerator { } }, PaperCard.FN_GET_RULES))); + //generate lookups for legends to link commander names to matrix rows for (int i=0; i1){//add partner commanders to matrix - for(PaperCard commander:deck.getCommanders()){ - if(!commander.equals(card)){ - int old = matrix[legendIntegerMap.get(card.getName())][cardIntegerMap.get(commander.getName())]; - matrix[legendIntegerMap.get(card.getName())][cardIntegerMap.get(commander.getName())] = old + 1; - } - } - } + //if the deck has the commander + if (deck.getCommanders().contains(legend)){ + //update the matrix by incrementing the connectivity count for each card in the deck + updateLegendMatrix(deck, legend, cardIntegerMap, legendIntegerMap, matrix); } } } + //convert the matrix into a map of pools for each commander HashMap>> cardPools = new HashMap<>(); for (PaperCard card:legends){ int col=legendIntegerMap.get(card.getName()); @@ -204,32 +194,39 @@ public final class CardRelationMatrixGenerator { deckPool.add(new AbstractMap.SimpleEntry(integerCardMap.get(k),matrix[col][k])); } } -/* ArrayIndexComparator comparator = new ArrayIndexComparator(ArrayUtils.toObject(distances)); - Integer[] indices = comparator.createIndexArray(); - Arrays.sort(indices, comparator); - List> deckPool=new ArrayList<>(); - int k=0; - boolean excludeThisCard=false;//if there are too few cards with at least one connection - for (int j=0;j<56;++k){ - if(distances[indices[cardList.size()-1-k]]==0){ - excludeThisCard = true; - break; - } - PaperCard cardToAdd=integerCardMap.get(indices[cardList.size()-1-k]); - if(!cardToAdd.getRules().getMainPart().getType().isLand()){//need x non-land cards - ++j; - } - deckPool.add(new AbstractMap.SimpleEntry(cardToAdd,distances[indices[cardList.size()-1-k]])); - }; - *//*if(excludeThisCard){ - continue; - }*/ - cardPools.put(card.getName(),deckPool); + cardPools.put(card.getName(), deckPool); } } return cardPools; } + //update the matrix by incrementing the connectivity count for each card in the deck + public static void updateLegendMatrix(Deck deck, PaperCard legend, Map cardIntegerMap, + Map legendIntegerMap, int[][] matrix){ + for (PaperCard pairCard:Iterables.filter(deck.getMain().toFlatList(), + Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND_NOT_WASTES), PaperCard.FN_GET_RULES))){ + if (!pairCard.getName().equals(legend.getName())){ + try { + int old = matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(pairCard.getName())]; + matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(pairCard.getName())] = old + 1; + }catch (NullPointerException ne){ + //Todo: Not sure what was failing here + ne.printStackTrace(); + } + } + + } + //add partner commanders to matrix + if(deck.getCommanders().size()>1){ + for(PaperCard partner:deck.getCommanders()){ + if(!partner.equals(legend)){ + int old = matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(partner.getName())]; + matrix[legendIntegerMap.get(legend.getName())][cardIntegerMap.get(partner.getName())] = old + 1; + } + } + } + } + public static class ArrayIndexComparator implements Comparator { private final Integer[] array;