From 02117874333b98192601e90be498a873efe66649 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Sun, 28 Nov 2010 21:10:31 +0000 Subject: [PATCH] Fixed arrows displayed under dialogs. Since now card.plugin is used in ShowCardsDialog. Added sourceCard to AbilityView (required for source arrows). --- .../src/main/java/mage/client/MageFrame.java | 4 +++ .../mage/client/dialog/ShowCardsDialog.java | 36 ++++++++++++------- .../main/java/mage/client/game/GamePanel.java | 7 ++-- .../client/util/DefaultActionCallback.java | 9 +++-- Mage.Common/src/mage/view/AbilityView.java | 8 +++-- Mage.Common/src/mage/view/CardView.java | 9 +++++ Mage.Common/src/mage/view/CardsView.java | 5 +-- 7 files changed, 56 insertions(+), 22 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 764603b4d38..5510592c515 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -164,12 +164,16 @@ public class MageFrame extends javax.swing.JFrame { e.printStackTrace(); } + desktopPane.add(ArrowBuilder.getArrowsPanel(), JLayeredPane.DRAG_LAYER); + desktopPane.addComponentListener(new ComponentAdapter(){ @Override public void componentResized(ComponentEvent e) { int width = ((JComponent)e.getSource()).getWidth(); int height = ((JComponent)e.getSource()).getHeight(); backgroundPane.setSize(width, height); + JPanel arrowsPanel = ArrowBuilder.getArrowsPanelRef(); + if (arrowsPanel != null) arrowsPanel.setSize(width, height); } }); diff --git a/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java index 5452159eade..ba600e8084e 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java @@ -43,10 +43,12 @@ import java.util.UUID; import javax.swing.JLayeredPane; import mage.cards.CardDimensions; +import mage.cards.MageCard; import mage.client.MageFrame; import mage.client.cards.BigCard; -import mage.client.cards.Card; +import mage.client.plugins.impl.Plugins; import mage.client.util.Config; +import mage.view.AbilityView; import mage.view.CardView; import mage.view.CardsView; @@ -82,16 +84,29 @@ public class ShowCardsDialog extends MageDialog implements MouseListener { private void loadCardsFew(CardsView showCards, BigCard bigCard, CardDimensions dimension, UUID gameId) { Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight); for (CardView card: showCards.values()) { - Card cardImg = new Card(card, bigCard, dimension, gameId); - cardImg.setBounds(rectangle); - cardArea.add(cardImg); - cardArea.moveToFront(cardImg); - cardImg.update(card); - cardImg.addMouseListener(this); + addCard(card, bigCard, gameId, rectangle, dimension); rectangle.translate(Config.dimensions.frameWidth, 0); } cardArea.setPreferredSize(new Dimension(Config.dimensions.frameWidth * showCards.size(), Config.dimensions.frameHeight)); } + + private void addCard(CardView card, BigCard bigCard, UUID gameId, Rectangle rectangle, CardDimensions dimension) { + if (card instanceof AbilityView) { + CardView tmp = ((AbilityView)card).getSourceCard(); + tmp.overrideRules(card.getRules()); + tmp.setIsAbility(true); + tmp.overrideTargets(card.getTargets()); + tmp.setAbility(card); // cross-reference, required for ability picker + card = tmp; + } + MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, dimension, gameId); + cardImg.setBounds(rectangle); + cardArea.add(cardImg); + cardArea.moveToFront(cardImg); + cardImg.update(card); + cardImg.addMouseListener(this); + cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight); + } private void loadCardsMany(CardsView showCards, BigCard bigCard, CardDimensions dimension, UUID gameId) { int columns = 1; @@ -99,12 +114,7 @@ public class ShowCardsDialog extends MageDialog implements MouseListener { Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight); int count = 0; for (CardView card: showCards.values()) { - Card cardImg = new Card(card, bigCard, dimension, gameId); - cardImg.setBounds(rectangle); - cardArea.add(cardImg); - cardArea.moveToFront(cardImg); - cardImg.update(card); - cardImg.addMouseListener(this); + addCard(card, bigCard, gameId, rectangle, dimension); if (count >= 20) { rectangle.translate(Config.dimensions.frameWidth, -400); columns++; diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 4974c16a4d3..79e189f3679 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -41,6 +41,7 @@ import java.awt.event.ComponentEvent; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JComponent; @@ -87,7 +88,6 @@ public class GamePanel extends javax.swing.JPanel { // Override layout (I can't edit generated code) this.setLayout(new BorderLayout()); final JLayeredPane j = new JLayeredPane(); - j.add(ArrowBuilder.getArrowsPanel(), JLayeredPane.MODAL_LAYER); j.setSize(1024,768); this.add(j); j.add(jSplitPane1, JLayeredPane.DEFAULT_LAYER); @@ -102,8 +102,6 @@ public class GamePanel extends javax.swing.JPanel { int width = ((JComponent)e.getSource()).getWidth(); int height = ((JComponent)e.getSource()).getHeight(); j.setSize(width, height); - JPanel arrowsPanel = ArrowBuilder.getArrowsPanelRef(); - if (arrowsPanel != null) arrowsPanel.setSize(width, height); jSplitPane1.setSize(width, height); } }); @@ -188,15 +186,18 @@ public class GamePanel extends javax.swing.JPanel { public void hideGame() { this.chatPanel.disconnect(); this.players.clear(); + logger.log(Level.FINE, "players clear."); this.pnlBattlefield.removeAll(); MageFrame.getCombatDialog().hideDialog(); this.setVisible(false); } public synchronized void init(GameView game) { + logger.log(Level.FINE, "init."); MageFrame.getCombatDialog().init(gameId, bigCard); MageFrame.getCombatDialog().setLocation(500, 300); addPlayers(game); + logger.log(Level.FINE, "added players."); updateGame(game); } diff --git a/Mage.Client/src/main/java/mage/client/util/DefaultActionCallback.java b/Mage.Client/src/main/java/mage/client/util/DefaultActionCallback.java index dfef73f2db0..7a7421af71f 100644 --- a/Mage.Client/src/main/java/mage/client/util/DefaultActionCallback.java +++ b/Mage.Client/src/main/java/mage/client/util/DefaultActionCallback.java @@ -18,7 +18,12 @@ public class DefaultActionCallback { } public void mouseClicked(MouseEvent e, UUID gameId, Session session, CardView card) { - if (gameId != null) - session.sendPlayerUUID(gameId, card.getId()); + if (gameId != null) { + if (card.isAbility() && card.getAbility() != null) { + session.sendPlayerUUID(gameId, card.getAbility().getId()); + } else { + session.sendPlayerUUID(gameId, card.getId()); + } + } } } diff --git a/Mage.Common/src/mage/view/AbilityView.java b/Mage.Common/src/mage/view/AbilityView.java index 21e211650a2..6e1035101ac 100644 --- a/Mage.Common/src/mage/view/AbilityView.java +++ b/Mage.Common/src/mage/view/AbilityView.java @@ -40,11 +40,13 @@ import mage.abilities.Ability; public class AbilityView extends CardView { private String sourceName; + private CardView sourceCard; - public AbilityView(Ability ability, String sourceName) { + public AbilityView(Ability ability, String sourceName, CardView sourceCard) { this.id = ability.getId(); this.name = "Ability"; this.sourceName = sourceName; + this.sourceCard = sourceCard; this.rules = new ArrayList(); rules.add(formatRule(ability.getRule())); this.power = ""; @@ -65,5 +67,7 @@ public class AbilityView extends CardView { return newRule; } - + public CardView getSourceCard() { + return this.sourceCard; + } } diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 3303db306f9..ea20fec998b 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -68,6 +68,7 @@ public class CardView implements Serializable { protected String expansionSetCode; protected int cardNumber; protected boolean isAbility; + protected CardView ability; public List targets; @@ -240,6 +241,14 @@ public class CardView implements Serializable { this.targets = newTargets; } + public void setAbility(CardView ability) { + this.ability = ability; + } + + public CardView getAbility() { + return this.ability; + } + @Override public String toString() { return getName() + " [" + getId() + "]"; diff --git a/Mage.Common/src/mage/view/CardsView.java b/Mage.Common/src/mage/view/CardsView.java index 02d3a768abf..021fb8bda6b 100644 --- a/Mage.Common/src/mage/view/CardsView.java +++ b/Mage.Common/src/mage/view/CardsView.java @@ -59,8 +59,9 @@ public class CardsView extends HashMap { public CardsView(Collection abilities, GameState state) { for (Ability ability: abilities) { - String sourceName = state.getPermanent(ability.getSourceId()).getName(); - this.put(ability.getId(), new AbilityView(ability, sourceName)); + Card sourceCard = state.getPermanent(ability.getSourceId()); + String sourceName = sourceCard.getName(); + this.put(ability.getId(), new AbilityView(ability, sourceName, new CardView(sourceCard))); } }