diff --git a/Mage.Client/src/main/java/mage/client/cards/Card.java b/Mage.Client/src/main/java/mage/client/cards/Card.java index a41978df09a..06c1cdc398d 100644 --- a/Mage.Client/src/main/java/mage/client/cards/Card.java +++ b/Mage.Client/src/main/java/mage/client/cards/Card.java @@ -470,15 +470,6 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis return image; } - @Override - public void setFoil(boolean foil) { - } - - @Override - public boolean isFoil() { - return false; - } - @Override public void setZone(String zone) { //To change body of implemented methods use File | Settings | File Templates. diff --git a/Mage.Client/src/main/java/mage/client/cards/DraftGrid.java b/Mage.Client/src/main/java/mage/client/cards/DraftGrid.java index aae69bdfa34..7ac187d529d 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DraftGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DraftGrid.java @@ -41,15 +41,16 @@ import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; - +import mage.cards.CardDimensions; import mage.cards.MageCard; import mage.client.plugins.impl.Plugins; import mage.client.util.CardViewRarityComparator; -import mage.client.util.Config; import mage.client.util.Event; import mage.client.util.Listener; +import mage.constants.Constants; import mage.view.CardView; import mage.view.CardsView; +import org.apache.log4j.Logger; /** * @@ -57,6 +58,8 @@ import mage.view.CardsView; */ public class DraftGrid extends javax.swing.JPanel implements MouseListener { + private static final Logger logger = Logger.getLogger(DraftGrid.class); + protected CardEventSource cardEventSource = new CardEventSource(); protected BigCard bigCard; @@ -68,30 +71,57 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener { public void loadBooster(CardsView booster, BigCard bigCard) { this.bigCard = bigCard; this.removeAll(); + + int maxRows = 4; + int numColumns = 5; int curColumn = 0; int curRow = 0; int offsetX = 5; int offsetY = 3; - Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight); - Dimension dimension = new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight); - List sortedCards = new ArrayList(booster.values()); - Collections.sort(sortedCards, new CardViewRarityComparator()); - for (CardView card: sortedCards) { - MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, dimension, null, true); - cardImg.addMouseListener(this); - add(cardImg); - cardImg.update(card); - rectangle.setLocation(curColumn * (Config.dimensions.frameWidth + offsetX) + offsetX, curRow * (Config.dimensions.frameHeight + offsetY) + offsetY); - cardImg.setBounds(rectangle); - cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight); - curColumn++; - if (curColumn == numColumns) { - curColumn = 0; - curRow++; + + CardDimensions cardDimension = null; + int maxCards; + double scale ; + + for (int i = 1; i < maxRows; i++) { + scale = (double) (this.getHeight()/i) / Constants.FRAME_MAX_HEIGHT; + cardDimension = new CardDimensions(scale); + maxCards = this.getWidth() / (cardDimension.frameWidth + offsetX); + if ((maxCards * i) >= booster.size()) { + numColumns = booster.size() / i; + if (booster.size() % i > 0) { + numColumns++; + } + break; } } - repaint(); + + if (cardDimension != null) { + Rectangle rectangle = new Rectangle(cardDimension.frameWidth, cardDimension.frameHeight); + Dimension dimension = new Dimension(cardDimension.frameWidth, cardDimension.frameHeight); + + List sortedCards = new ArrayList(booster.values()); + Collections.sort(sortedCards, new CardViewRarityComparator()); + for (CardView card: sortedCards) { + MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, dimension, null, true); + cardImg.addMouseListener(this); + add(cardImg); + cardImg.update(card); + rectangle.setLocation(curColumn * (cardDimension.frameWidth + offsetX) + offsetX, curRow * (rectangle.height + offsetY) + offsetY); + + cardImg.setBounds(rectangle); + cardImg.setCardBounds(rectangle.x, rectangle.y, rectangle.width, rectangle.height); + curColumn++; + if (curColumn == numColumns) { + curColumn = 0; + curRow++; + } + } + repaint(); + } else { + logger.warn("Draft Grid - no possible fit of cards"); + } } public void addCardEventListener(Listener listener) { diff --git a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java index 6241884854f..0766ca32b1a 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java +++ b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java @@ -16,7 +16,6 @@ import mage.client.util.ImageHelper; import mage.client.util.gui.ArrowBuilder; import mage.client.util.gui.GuiDisplayUtil; import mage.components.CardInfoPane; -import mage.constants.Rarity; import mage.remote.Session; import mage.utils.ThreadUtils; import mage.view.CardView; @@ -412,7 +411,7 @@ public class MageActionCallback implements ActionCallback { if (image != null && image instanceof BufferedImage) { // XXX: scaled to fit width image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth()); - bigCard.setCard(card.getOriginal().getId(), image, card.getOriginal().getRules(), card.isFoil()); + bigCard.setCard(card.getOriginal().getId(), image, card.getOriginal().getRules(), false); if (card.getOriginal().isAbility()) { bigCard.showTextComponent(); } else { diff --git a/Mage.Client/src/main/java/mage/client/util/Config.java b/Mage.Client/src/main/java/mage/client/util/Config.java index ca823888733..395879d1b8d 100644 --- a/Mage.Client/src/main/java/mage/client/util/Config.java +++ b/Mage.Client/src/main/java/mage/client/util/Config.java @@ -85,7 +85,7 @@ public class Config { // cardScalingFactor = Double.valueOf(0.4); // cardScalingFactorEnlarged = Double.valueOf(0.5); // handScalingFactor = Double.valueOf(1.3); -// defaultGameType = p.getProperty("default-game-type", "Human");; +// defaultGameType = p.getProperty("default-game-type", "Human"); // defaultDeckPath = ""; // defaultOtherPlayerIndex = "1"; // defaultComputerName = "Computer"; diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java index cc9ce07983e..e83c4e6380a 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java @@ -25,6 +25,7 @@ import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import mage.constants.Constants; /** * Main class for drawing Mage card object. @@ -71,7 +72,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti private GlowText ptText; private boolean displayEnabled = true; private boolean isAnimationPanel; - private int cardXOffset, cardYOffset, cardWidth, cardHeight; + public int cardXOffset, cardYOffset, cardWidth, cardHeight; private boolean isSelected; private boolean showCastingCost; @@ -99,10 +100,11 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti private boolean displayTitleAnyway; - public CardPanel(CardView newGameCard, UUID gameId, final boolean loadImage, ActionCallback callback, final boolean foil) { + public CardPanel(CardView newGameCard, UUID gameId, final boolean loadImage, ActionCallback callback, final boolean foil, Dimension dimension) { this.gameCard = newGameCard; this.callback = callback; this.gameId = gameId; + this.setCardBounds(0, 0, dimension.width, dimension.height); this.isPermanent = this.gameCard instanceof PermanentView; if (isPermanent) { @@ -112,54 +114,58 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti //for container debug (don't remove) //setBorder(BorderFactory.createLineBorder(Color.green)); - buttonPanel = new JPanel(); - buttonPanel.setLayout(null); - buttonPanel.setOpaque(false); - add(buttonPanel); + if (this.gameCard.canTransform()) { + buttonPanel = new JPanel(); + buttonPanel.setLayout(null); + buttonPanel.setOpaque(false); + add(buttonPanel); - dayNightButton = new JButton(""); - dayNightButton.setLocation(2, 2); - dayNightButton.setSize(25, 25); + dayNightButton = new JButton(""); + dayNightButton.setLocation(2, 2); + dayNightButton.setSize(25, 25); - buttonPanel.setVisible(this.gameCard.canTransform()); + buttonPanel.setVisible(this.gameCard.canTransform()); - BufferedImage day = ImageManagerImpl.getInstance().getDayImage(); - dayNightButton.setIcon(new ImageIcon(day)); + BufferedImage day = ImageManagerImpl.getInstance().getDayImage(); + dayNightButton.setIcon(new ImageIcon(day)); - buttonPanel.add(dayNightButton); + buttonPanel.add(dayNightButton); - dayNightButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - // if card is being rotated, ignore action performed - // if card is tapped, no visual transforming is possible (implementation limitation) - // if card is permanent, it will be rotated by Mage, so manual rotate should be possible - if (animationInProgress || isTapped() || isPermanent) { - if (isPermanent) { - JOptionPane.showMessageDialog(null, "You can't transform cards on battlefield."); + dayNightButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // if card is being rotated, ignore action performed + // if card is tapped, no visual transforming is possible (implementation limitation) + // if card is permanent, it will be rotated by Mage, so manual rotate should be possible + if (animationInProgress || isTapped() || isPermanent) { + if (isPermanent) { + JOptionPane.showMessageDialog(null, "You can't transform cards on battlefield."); + } + return; } - return; + Animation.transformCard(CardPanel.this, CardPanel.this, true); } - Animation.transformCard(CardPanel.this, CardPanel.this, true); - } - }); + }); + } + if (this.gameCard.isToken()) { // token icon - iconPanel = new JPanel(); - iconPanel.setLayout(null); - iconPanel.setOpaque(false); - add(iconPanel); + iconPanel = new JPanel(); + iconPanel.setLayout(null); + iconPanel.setOpaque(false); + add(iconPanel); - tokenButton = new JButton(""); - tokenButton.setLocation(2, 2); - tokenButton.setSize(25, 25); + tokenButton = new JButton(""); + tokenButton.setLocation(2, 2); + tokenButton.setSize(25, 25); - iconPanel.setVisible(this.gameCard.isToken()); + iconPanel.setVisible(this.gameCard.isToken()); - BufferedImage tokenIconImage = ImageManagerImpl.getInstance().getTokenIconImage(); - tokenButton.setIcon(new ImageIcon(tokenIconImage)); + BufferedImage tokenIconImage = ImageManagerImpl.getInstance().getTokenIconImage(); + tokenButton.setIcon(new ImageIcon(tokenIconImage)); - iconPanel.add(tokenButton); + iconPanel.add(tokenButton); + } setBackground(Color.black); setOpaque(false); @@ -211,12 +217,11 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti if (!loadImage || gameCard.isFaceDown()) { return; } - BufferedImage srcImage = ImageCache.getThumbnail(gameCard); + BufferedImage srcImage = ImageCache.getImage(gameCard, getCardWidth(), getCardHeight()); if (srcImage != null) { hasImage = true; setText(gameCard); setImage(srcImage); - setFoil(foil); } if (gameCard.isTransformed()) { toggleTransformed(); @@ -260,10 +265,6 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti } } - @Override - public boolean isFoil() { - return this.isFoil; - } @Override public void setZone(String zone) { @@ -275,11 +276,6 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti return zone; } - @Override - public void setFoil(boolean foil) { - this.isFoil = foil; - } - public void setScalingType(ScalingType scalingType) { imagePanel.setScalingType(scalingType); } @@ -303,12 +299,6 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti repaint(); } - public void setAttacking(boolean isAttacking) { - //TODO:uncomment - //this.gameCard.setAttacking(isAttacking); - repaint(); - } - public boolean getSelected() { return this.isSelected; } @@ -427,12 +417,15 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti overlayPanel.setVisible(false); } - buttonPanel.setLocation(cardXOffset + borderSize, cardYOffset + borderSize); - buttonPanel.setSize(cardWidth - borderSize * 2, cardHeight - borderSize * 2); - - iconPanel.setLocation(cardXOffset + borderSize, cardYOffset + borderSize); - iconPanel.setSize(cardWidth - borderSize * 2, cardHeight - borderSize * 2); - + if (buttonPanel != null) { + buttonPanel.setLocation(cardXOffset + borderSize, cardYOffset + borderSize); + buttonPanel.setSize(cardWidth - borderSize * 2, cardHeight - borderSize * 2); + dayNightButton.setLocation(0, cardHeight - 30); + } + if (iconPanel != null) { + iconPanel.setLocation(cardXOffset + borderSize, cardYOffset + borderSize); + iconPanel.setSize(cardWidth - borderSize * 2, cardHeight - borderSize * 2); + } int fontHeight = Math.round(cardHeight * (27f / 680)); boolean showText = (!isAnimationPanel && fontHeight < 12); titleText.setVisible(showText); @@ -450,8 +443,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti int offsetX = Math.round((CARD_SIZE_FULL.width - cardWidth) / 10.0f); ptText.setLocation(cardXOffset + ptX - TEXT_GLOW_SIZE / 2 - offsetX, cardYOffset + ptY - TEXT_GLOW_SIZE / 2); - dayNightButton.setLocation(0, cardHeight - 30); - + if (isAnimationPanel || cardWidth < 200) { imagePanel.setScalingType(ScalingType.nearestNeighbor); } else { @@ -465,7 +457,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti } @Override - public void setCardBounds(int x, int y, int width, int height) { + public final void setCardBounds(int x, int y, int width, int height) { cardWidth = width; cardHeight = height; int rotCenterX = Math.round(width / 2f); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java b/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java index ffad2e959fb..a76e2120c2b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java @@ -79,9 +79,7 @@ public class CardPluginImpl implements CardPlugin { @Override public MagePermanent getMagePermanent(PermanentView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage) { - boolean foil = canBeFoil && (new Random()).nextInt(5) == 0; - CardPanel cardPanel = new CardPanel(permanent, gameId, loadImage, callback, foil); - cardPanel.setCardBounds(0, 0, dimension.width, dimension.height); + CardPanel cardPanel = new CardPanel(permanent, gameId, loadImage, callback, false, dimension); boolean implemented = !permanent.getRarity().equals(Rarity.NA); cardPanel.setShowCastingCost(implemented); return cardPanel; @@ -89,9 +87,7 @@ public class CardPluginImpl implements CardPlugin { @Override public MagePermanent getMageCard(CardView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage) { - boolean foil = canBeFoil && (new Random()).nextInt(5) == 0; - CardPanel cardPanel = new CardPanel(permanent, gameId, loadImage, callback, foil); - cardPanel.setCardBounds(0, 0, dimension.width, dimension.height); + CardPanel cardPanel = new CardPanel(permanent, gameId, loadImage, callback, false, dimension); boolean implemented = !permanent.getRarity().equals(Rarity.NA); cardPanel.setShowCastingCost(implemented); return cardPanel; diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java index 070ef71ddae..27843d7fb61 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java @@ -56,12 +56,13 @@ public class ImageCache { @Override public BufferedImage apply(String key) { try { - boolean thumbnail = false; + boolean usesVariousArt = false; if (key.endsWith("#usesVariousArt")) { usesVariousArt = true; key = key.replace("#usesVariousArt", ""); } + boolean thumbnail = false; if (key.endsWith("#thumb")) { thumbnail = true; key = key.replace("#thumb", ""); @@ -93,6 +94,7 @@ public class ImageCache { } TFile file = new TFile(path); if (!file.exists()) { + log.warn("File does not exist: " + file.toString()); return null; } @@ -100,7 +102,7 @@ public class ImageCache { String thumbnailPath = buildThumbnailPath(path); TFile thumbnailFile = new TFile(thumbnailPath); if (thumbnailFile.exists()) { - //log.debug("loading thumbnail for " + key + ", path="+thumbnailPath); + log.debug("loading thumbnail for " + key + ", path="+thumbnailPath); return loadImage(thumbnailFile); } else { BufferedImage image = loadImage(file); @@ -108,7 +110,7 @@ public class ImageCache { if (image == null) { return null; } - //log.debug("creating thumbnail for " + key); + log.debug("creating thumbnail for " + key); return makeThumbnail(image, thumbnailPath); } } else { @@ -156,7 +158,7 @@ public class ImageCache { if (card.getUsesVariousArt()) { key += "#usesVariousArt"; } - //log.debug("#key: " + key); + // log.debug("#key: " + key); return getImage(key); } @@ -165,7 +167,7 @@ public class ImageCache { if (card.getUsesVariousArt()) { key += "#usesVariousArt"; } - //log.debug("#key: " + key); + // log.debug("#key: " + key); return getImage(key); } @@ -213,6 +215,7 @@ public class ImageCache { public static BufferedImage loadImage(TFile file) { BufferedImage image = null; if (!file.exists()) { + log.debug("File does not exist: " + file.toString()); return null; } try { @@ -297,9 +300,16 @@ public class ImageCache { * Returns the image appropriate to display the card in the picture panel */ public static BufferedImage getImage(CardView card, int width, int height) { + if (Constants.THUMBNAIL_SIZE_FULL.width + 10 > width) { + return getThumbnail(card); + } String key = getKey(card); + if (card.getUsesVariousArt()) { + key += "#usesVariousArt"; + } BufferedImage original = getImage(key); if (original == null) { + log.warn(key + " not found"); return null; } diff --git a/Mage.Common/src/mage/cards/MageCard.java b/Mage.Common/src/mage/cards/MageCard.java index c2012ad262c..92089bc9228 100644 --- a/Mage.Common/src/mage/cards/MageCard.java +++ b/Mage.Common/src/mage/cards/MageCard.java @@ -21,8 +21,6 @@ public abstract class MageCard extends JPanel { public abstract void update(CardView card); public abstract void updateImage(); public abstract Image getImage(); - public abstract void setFoil(boolean foil); - public abstract boolean isFoil(); public abstract void setZone(String zone); public abstract String getZone(); public abstract void updateCallback(ActionCallback callback, UUID gameId); diff --git a/Mage.Common/src/mage/cards/MagePermanent.java b/Mage.Common/src/mage/cards/MagePermanent.java index 59dd9eef17a..f9418c996ab 100644 --- a/Mage.Common/src/mage/cards/MagePermanent.java +++ b/Mage.Common/src/mage/cards/MagePermanent.java @@ -1,7 +1,6 @@ package mage.cards; import java.util.List; - import mage.view.PermanentView; public abstract class MagePermanent extends MageCard {