Now StackAbilityView has sourceCard. Added displaying source card for abilities. Fixed arrows offsets. Added "source" blue arrows (target arrows are red). Fixed NullPointerException happen for AbilityPicker. Fixed random order of spells in stack. Code clean up.

This commit is contained in:
magenoxx 2010-11-27 15:29:48 +00:00
parent a910b59399
commit 03cb41f2aa
10 changed files with 110 additions and 139 deletions

View file

@ -51,6 +51,8 @@ import java.util.UUID;
import javax.swing.text.BadLocationException;
import javax.swing.text.StyledDocument;
import mage.client.plugins.impl.Plugins;
import org.jdesktop.swingx.JXPanel;
/**
@ -62,10 +64,20 @@ public class BigCard extends javax.swing.JPanel {
protected Image bigImage;
protected UUID cardId;
protected JXPanel panel;
protected boolean initState;
public BigCard() {
initComponents();
if (!Plugins.getInstance().isCardPluginLoaded()) {
initBounds();
}
}
protected void initBounds() {
initState = true;
scrollPane.setBounds(20, 230, 210, 120);
scrollPane.setBounds(new Rectangle(CONTENT_MAX_XOFFSET, TEXT_MAX_YOFFSET, TEXT_MAX_WIDTH, TEXT_MAX_HEIGHT));
}
public void setCard(UUID cardId, Image image, List<String> strings) {
if (this.cardId == null || !this.cardId.equals(cardId)) {
@ -99,16 +111,13 @@ public class BigCard extends javax.swing.JPanel {
graphics.drawImage(bigImage, 0, 0, this);
super.paintComponent(graphics);
}
public void removeTextComponent() {
remove(this.scrollPane);
}
public void hideTextComponent() {
this.scrollPane.setVisible(false);
}
public void showTextComponent() {
if (!initState) {initBounds();}
this.scrollPane.setVisible(true);
}
@ -151,8 +160,6 @@ public class BigCard extends javax.swing.JPanel {
scrollPane.setViewportView(text);
add(scrollPane);
//scrollPane.setBounds(20, 230, 210, 120);
//scrollPane.setBounds(new Rectangle(CONTENT_MAX_XOFFSET, TEXT_MAX_YOFFSET, TEXT_MAX_WIDTH, TEXT_MAX_HEIGHT));
}// </editor-fold>//GEN-END:initComponents

View file

@ -36,20 +36,19 @@ package mage.client.cards;
import java.awt.Component;
import java.awt.Dimension;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.Map.Entry;
import mage.cards.CardDimensions;
import mage.cards.MageCard;
import mage.client.plugins.adapters.MageMouseAdapter;
import mage.client.plugins.adapters.MageMouseMotionAdapter;
import mage.client.plugins.impl.Plugins;
import mage.client.util.Config;
import mage.view.CardView;
import mage.view.CardsView;
import mage.view.StackAbilityView;
/**
*
@ -57,7 +56,7 @@ import mage.view.CardsView;
*/
public class Cards extends javax.swing.JPanel {
private Map<UUID, MageCard> cards = new HashMap<UUID, MageCard>();
private Map<UUID, MageCard> cards = new LinkedHashMap<UUID, MageCard>();
/** Creates new form Cards */
public Cards() {
@ -73,13 +72,7 @@ public class Cards extends javax.swing.JPanel {
public boolean loadCards(CardsView cardsView, BigCard bigCard, UUID gameId) {
boolean changed = false;
for (CardView card: cardsView.values()) {
if (!cards.containsKey(card.getId())) {
addCard(card, bigCard, gameId);
changed = true;
}
cards.get(card.getId()).update(card);
}
for (Iterator<Entry<UUID, MageCard>> i = cards.entrySet().iterator(); i.hasNext();) {
Entry<UUID, MageCard> entry = i.next();
if (!cardsView.containsKey(entry.getKey())) {
@ -89,6 +82,21 @@ public class Cards extends javax.swing.JPanel {
}
}
for (CardView card: cardsView.values()) {
if (card instanceof StackAbilityView) {
CardView tmp = ((StackAbilityView)card).getSourceCard();
tmp.overrideRules(card.getRules());
tmp.setIsAbility(true);
tmp.overrideTargets(card.getTargets());
card = tmp;
}
if (!cards.containsKey(card.getId())) {
addCard(card, bigCard, gameId);
changed = true;
}
cards.get(card.getId()).update(card);
}
cardArea.setPreferredSize(new Dimension(cards.size() * Config.dimensions.frameWidth, Config.dimensions.frameHeight));
cardArea.revalidate();
cardArea.repaint();

View file

@ -60,6 +60,7 @@ public class AbilityPicker extends JPopupMenu implements PopupMenuListener {
}
public void show(AbilityPickerView choices, Point p) {
if (p == null) return;
this.removeAll();
for (Entry<UUID, String> choice: choices.getChoices().entrySet()) {
this.add(new AbilityPickerAction(choice.getKey(), choice.getValue()));

View file

@ -35,7 +35,6 @@
package mage.client.game;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
@ -45,7 +44,6 @@ import java.util.UUID;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

View file

@ -11,6 +11,7 @@ import java.util.UUID;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.SwingUtilities;
import mage.cards.MageCard;
import mage.cards.MagePermanent;
@ -70,26 +71,45 @@ public class MageActionCallback implements ActionCallback {
// Draw Arrows for targets
List<UUID> targets = data.card.getTargets();
if (targets != null) {
Point parent = SwingUtilities.getRoot(data.component).getLocationOnScreen();
Point me = new Point(data.locationOnScreen);
me.translate(-parent.x, -parent.y);
for (UUID uuid : targets) {
//System.out.println("Getting play area panel for uuid: " + uuid);
PlayAreaPanel p = session.getGame().getPlayers().get(uuid);
if (p != null) {
Point target = p.getLocationOnScreen();
Point me = data.locationOnScreen;
target.translate(-parent.x, -parent.y);
ArrowBuilder.addArrow((int)me.getX() + 35, (int)me.getY(), (int)target.getX() + 40, (int)target.getY() - 40, Color.red);
} else {
for (PlayAreaPanel pa : session.getGame().getPlayers().values()) {
MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(uuid);
if (permanent != null) {
Point target = permanent.getLocationOnScreen();
Point me = data.locationOnScreen;
target.translate(-parent.x, -parent.y);
ArrowBuilder.addArrow((int)me.getX() + 35, (int)me.getY(), (int)target.getX() + 40, (int)target.getY() + 10, Color.red);
}
}
}
}
}
// Draw Arrows for source
if (data.card.isAbility()) {
Point parent = SwingUtilities.getRoot(data.component).getLocationOnScreen();
Point me = new Point(data.locationOnScreen);
me.translate(-parent.x, -parent.y);
UUID uuid = data.card.getId();
for (PlayAreaPanel pa : session.getGame().getPlayers().values()) {
MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(uuid);
if (permanent != null) {
Point source = permanent.getLocationOnScreen();
source.translate(-parent.x, -parent.y);
ArrowBuilder.addArrow((int)source.getX() + 40, (int)source.getY() + 10, (int)me.getX() + 35, (int)me.getY() + 20, Color.blue);
}
}
}
}
@Override
@ -99,13 +119,18 @@ public class MageActionCallback implements ActionCallback {
MageCard card = (MageCard) data.component;
if (card.getOriginal().getId() != bigCard.getCardId()) {
synchronized (MageMouseAdapter.class) {
synchronized (MageActionCallback.class) {
if (card.getOriginal().getId() != bigCard.getCardId()) {
Image image = card.getImage();
if (image != null && image instanceof BufferedImage) {
image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth(), bigCard.getHeight());
bigCard.setCard(card.getOriginal().getId(), image, card.getOriginal().getRules());
bigCard.hideTextComponent();
bigCard.showTextComponent();
if (card.getOriginal().isAbility()) {
bigCard.showTextComponent();
} else {
bigCard.hideTextComponent();
};
} else {
JXPanel panel = GuiDisplayUtil.getDescription(card.getOriginal(), bigCard.getWidth(), bigCard.getHeight());
panel.setVisible(true);

View file

@ -1,47 +0,0 @@
package mage.client.plugins.adapters;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.UUID;
import mage.cards.MageCard;
import mage.client.MageFrame;
import mage.client.plugins.impl.Plugins;
import mage.client.util.DefaultActionCallback;
public class MageMouseAdapter extends MouseAdapter {
private Component parent;
private UUID gameId;
protected static DefaultActionCallback defaultCallback = DefaultActionCallback.getInstance();
public MageMouseAdapter(Component parent, UUID gameId) {
this.parent = parent;
this.gameId = gameId;
}
@Override
public void mousePressed(MouseEvent e) {
if (!Plugins.getInstance().isCardPluginLoaded())
return;
if (e.getButton() == MouseEvent.BUTTON1) {
int count = e.getClickCount();
if (count > 0) {
Object o = parent.getComponentAt(e.getPoint());
if (o instanceof MageCard) {
MageCard selectedCard = (MageCard) o;
// TODO: uncomment when attached cards works in plugin
/*
* int x = e.getX() - selectedCard.getX(); int y = e.getY()
* - selectedCard.getY(); CardView card =
* selectedCard.getCardByPosition(x, y);
*/
defaultCallback.mouseClicked(e, gameId, MageFrame.getSession(), selectedCard.getOriginal());
}
}
}
}
}

View file

@ -1,53 +0,0 @@
package mage.client.plugins.adapters;
import java.awt.Component;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import mage.cards.MageCard;
import mage.client.cards.BigCard;
import mage.client.plugins.impl.Plugins;
import mage.client.util.ImageHelper;
import mage.client.util.gui.GuiDisplayUtil;
import org.jdesktop.swingx.JXPanel;
public class MageMouseMotionAdapter extends MouseMotionAdapter {
private Component parent;
private BigCard bigCard;
public MageMouseMotionAdapter(Component parent, BigCard bigCard) {
this.parent = parent;
this.bigCard = bigCard;
}
@Override
public void mouseMoved(MouseEvent e) {
if (!Plugins.getInstance().isCardPluginLoaded()) {return;}
if (bigCard == null) {return;}
Object o = parent.getComponentAt(e.getPoint());
if (o instanceof MageCard) {
MageCard card = (MageCard) o;
if (card.getOriginal().getId() != bigCard.getCardId()) {
synchronized (MageMouseAdapter.class) {
if (card.getOriginal().getId() != bigCard.getCardId()) {
Image image = card.getImage();
if (image != null && image instanceof BufferedImage) {
image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth(), bigCard.getHeight());
bigCard.setCard(card.getOriginal().getId(), image, card.getOriginal().getRules());
bigCard.hideTextComponent();
} else {
JXPanel panel = GuiDisplayUtil.getDescription(card.getOriginal(), bigCard.getWidth(), bigCard.getHeight());
panel.setVisible(true);
bigCard.hideTextComponent();
bigCard.addJXPanel(card.getOriginal().getId(), panel);
}
}
}
}
}
}
}