1
0
Fork 0
mirror of https://github.com/correl/mage.git synced 2025-04-10 09:11:04 -09:00

Flipped cards.

This commit is contained in:
magenoxx 2011-07-06 09:33:53 +04:00
parent 1091fc3cbe
commit 2fe5bff43d
5 changed files with 33 additions and 8 deletions
Mage.Client
plugins
src/main/java/mage/client/cards
Mage.Common/src/mage/cards
Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/card/arcane

View file

@ -454,6 +454,9 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
@Override @Override
public boolean isTapped() {return false;} public boolean isTapped() {return false;}
@Override
public boolean isFlipped() {return false;}
@Override @Override
public void onBeginAnimation() {} public void onBeginAnimation() {}

View file

@ -12,6 +12,7 @@ public abstract class MageCard extends JPanel {
abstract public void onBeginAnimation(); abstract public void onBeginAnimation();
abstract public void onEndAnimation(); abstract public void onEndAnimation();
abstract public boolean isTapped(); abstract public boolean isTapped();
abstract public boolean isFlipped();
abstract public void setAlpha(float transparency); abstract public void setAlpha(float transparency);
abstract public float getAlpha(); abstract public float getAlpha();
abstract public CardView getOriginal(); abstract public CardView getOriginal();

View file

@ -102,20 +102,28 @@ abstract public class Animation {
} }
} }
static public void tapCardToggle (final CardPanel panel, final MagePermanent parent) { static public void tapCardToggle (final CardPanel panel, final MagePermanent parent, final boolean tapped, final boolean flipped) {
new Animation(300) { new Animation(300) {
protected void start () { protected void start () {
parent.onBeginAnimation(); parent.onBeginAnimation();
} }
protected void update (float percentage) { protected void update (float percentage) {
panel.tappedAngle = CardPanel.TAPPED_ANGLE * percentage; if (tapped) {
if (!panel.isTapped()) panel.tappedAngle = CardPanel.TAPPED_ANGLE - panel.tappedAngle; panel.tappedAngle = CardPanel.TAPPED_ANGLE * percentage;
// reverse movement if untapping
if (!panel.isTapped()) panel.tappedAngle = CardPanel.TAPPED_ANGLE - panel.tappedAngle;
}
if (flipped) {
panel.flippedAngle = CardPanel.FLIPPED_ANGLE * percentage;
if (!panel.isFlipped()) panel.flippedAngle = CardPanel.FLIPPED_ANGLE - panel.flippedAngle;
}
panel.repaint(); panel.repaint();
} }
protected void end () { protected void end () {
panel.tappedAngle = panel.isTapped() ? CardPanel.TAPPED_ANGLE : 0; if (tapped) panel.tappedAngle = panel.isTapped() ? CardPanel.TAPPED_ANGLE : 0;
if (flipped) panel.flippedAngle = panel.isFlipped() ? CardPanel.FLIPPED_ANGLE : 0;
parent.onEndAnimation(); parent.onEndAnimation();
parent.repaint(); parent.repaint();
} }

View file

@ -39,6 +39,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
private static final Logger log = Logger.getLogger(CardPanel.class); private static final Logger log = Logger.getLogger(CardPanel.class);
static public final double TAPPED_ANGLE = Math.PI / 2; static public final double TAPPED_ANGLE = Math.PI / 2;
static public final double FLIPPED_ANGLE = Math.PI;
static public final float ASPECT_RATIO = 3.5f / 2.5f; static public final float ASPECT_RATIO = 3.5f / 2.5f;
static public final int POPUP_X_GAP = 1; // prevent popup window from blinking static public final int POPUP_X_GAP = 1; // prevent popup window from blinking
//static public final float ASPECT_RATIO = 1.0f; //static public final float ASPECT_RATIO = 1.0f;
@ -61,6 +62,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
//public List<CardPanel> attachedPanels = new ArrayList(); //public List<CardPanel> attachedPanels = new ArrayList();
private List<MagePermanent> links = new ArrayList<MagePermanent>(); private List<MagePermanent> links = new ArrayList<MagePermanent>();
public double tappedAngle = 0; public double tappedAngle = 0;
public double flippedAngle = 0;
public ScaledImagePanel imagePanel; public ScaledImagePanel imagePanel;
public ImagePanel overlayPanel; public ImagePanel overlayPanel;
@ -147,6 +149,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
public void run() { public void run() {
try { try {
tappedAngle = isTapped() ? CardPanel.TAPPED_ANGLE : 0; tappedAngle = isTapped() ? CardPanel.TAPPED_ANGLE : 0;
flippedAngle = isFlipped() ? CardPanel.FLIPPED_ANGLE : 0;
BufferedImage srcImage = ImageCache.getThumbnail(gameCard); BufferedImage srcImage = ImageCache.getThumbnail(gameCard);
if (srcImage != null) { if (srcImage != null) {
hasImage = true; hasImage = true;
@ -289,10 +292,10 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
if (!displayEnabled) return; if (!displayEnabled) return;
if (!isValid()) super.validate(); if (!isValid()) super.validate();
Graphics2D g2d = (Graphics2D) g; Graphics2D g2d = (Graphics2D) g;
if (tappedAngle > 0) { if (tappedAngle + flippedAngle > 0) {
g2d = (Graphics2D) g2d.create(); g2d = (Graphics2D) g2d.create();
float edgeOffset = cardWidth / 2f; float edgeOffset = cardWidth / 2f;
g2d.rotate(tappedAngle, cardXOffset + edgeOffset, cardYOffset + cardHeight - edgeOffset); g2d.rotate(tappedAngle+flippedAngle, cardXOffset + edgeOffset, cardYOffset + cardHeight - edgeOffset);
} }
super.paint(g2d); super.paint(g2d);
} }
@ -516,6 +519,14 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
return false; return false;
} }
@Override
public boolean isFlipped() {
if (isPermanent) {
return ((PermanentView) gameCard).isFlipped();
}
return false;
}
@Override @Override
public void onBeginAnimation() { public void onBeginAnimation() {
} }
@ -527,8 +538,10 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
@Override @Override
public void update(CardView card) { public void update(CardView card) {
if (isPermanent) { if (isPermanent) {
if (isTapped() != ((PermanentView) card).isTapped()) { boolean needsTapping = isTapped() != ((PermanentView) card).isTapped();
Animation.tapCardToggle(this, this); boolean needsFlipping = isFlipped() != ((PermanentView) card).isFlipped();
if (needsTapping || needsFlipping) {
Animation.tapCardToggle(this, this, needsTapping, needsFlipping);
} }
} }
if (CardUtil.isCreature(card) && CardUtil.isPlaneswalker(card)) { if (CardUtil.isCreature(card) && CardUtil.isPlaneswalker(card)) {