diff --git a/Mage.Client/src/main/java/mage/client/cards/Cards.java b/Mage.Client/src/main/java/mage/client/cards/Cards.java index 9d4c70758ba..3360df11601 100644 --- a/Mage.Client/src/main/java/mage/client/cards/Cards.java +++ b/Mage.Client/src/main/java/mage/client/cards/Cards.java @@ -155,7 +155,7 @@ public class Cards extends javax.swing.JPanel { } // order objects for display - java.util.List orderedList = new ArrayList(); + java.util.List orderedList = new ArrayList<>(); for (CardView card: cardsView.values()) { orderedList.add(0, card); } @@ -173,7 +173,10 @@ public class Cards extends javax.swing.JPanel { tmp.setIsAbility(true); tmp.overrideTargets(card.getTargets()); tmp.overrideId(card.getId()); + tmp.setAbilityType(((StackAbilityView)card).getAbilityType()); card = tmp; + } else { + card.setAbilityType(null); } if (!cards.containsKey(card.getId())) { addCard(card, bigCard, gameId); @@ -302,7 +305,7 @@ public class Cards extends javax.swing.JPanel { } private void layoutCards() { - java.util.List cards = new ArrayList(); + java.util.List cards = new ArrayList<>(); for (Component component : cardArea.getComponents()) { if (component instanceof CardPanel) { 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 29b7bbf204f..9f58408671d 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 @@ -31,6 +31,8 @@ import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import mage.constants.AbilityType; +import mage.constants.MageObjectType; /** * Main class for drawing Mage card object. @@ -104,7 +106,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti private boolean animationInProgress = false; private JButton dayNightButton; - private JButton tokenButton; + private JButton typeButton; private JButton showCopySourceButton; private boolean displayTitleAnyway; @@ -156,23 +158,16 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti }); } + if (newGameCard.isAbility()) { + if (AbilityType.TRIGGERED.equals(newGameCard.getAbilityType())) { + setTypeIcon(ImageManagerImpl.getInstance().getTriggeredAbilityImage(),"Triggered Ability"); + } else if (AbilityType.ACTIVATED.equals(newGameCard.getAbilityType())) { + setTypeIcon(ImageManagerImpl.getInstance().getActivatedAbilityImage(),"Activated Ability"); + } + } + if (this.gameCard.isToken()) { - // token icon - iconPanel = new JPanel(); - iconPanel.setLayout(null); - iconPanel.setOpaque(false); - add(iconPanel); - - tokenButton = new JButton(""); - tokenButton.setLocation(2, 2); - tokenButton.setSize(25, 25); - - iconPanel.setVisible(this.gameCard.isToken()); - - BufferedImage tokenIconImage = ImageManagerImpl.getInstance().getTokenIconImage(); - tokenButton.setIcon(new ImageIcon(tokenIconImage)); - - iconPanel.add(tokenButton); + setTypeIcon(ImageManagerImpl.getInstance().getTokenIconImage(),"Token Permanent"); } // icon to inform about permanent is copying something @@ -276,6 +271,24 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti }); } + private void setTypeIcon(BufferedImage bufferedImage, String toolTipText) { + iconPanel = new JPanel(); + iconPanel.setLayout(null); + iconPanel.setOpaque(false); + add(iconPanel); + + typeButton = new JButton(""); + typeButton.setLocation(2, 2); + typeButton.setSize(25, 25); + + iconPanel.setVisible(true); + typeButton.setIcon(new ImageIcon(bufferedImage)); + if (toolTipText != null) { + typeButton.setToolTipText(toolTipText); + } + iconPanel.add(typeButton); + } + public void cleanUp() { if (dayNightButton != null) { for(ActionListener al: dayNightButton.getActionListeners()) { diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java index 30ad68bb0ed..42b256f4c51 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java @@ -13,6 +13,8 @@ public interface ImageManager { Image getNightImage(); Image getTokenIconImage(); + Image getTriggeredAbilityImage(); + Image getActivatedAbilityImage(); Image getCopyInformIconImage(); Image getDlgAcceptButtonImage(); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java index 7192d912f7a..d08a09f6cc7 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java @@ -15,7 +15,7 @@ import java.util.Map; public class ImageManagerImpl implements ImageManager { - private static ImageManagerImpl fInstance = new ImageManagerImpl(); + private static final ImageManagerImpl fInstance = new ImageManagerImpl(); public static ImageManagerImpl getInstance() { return fInstance; @@ -29,7 +29,7 @@ public class ImageManagerImpl implements ImageManager { String[] phases = {"Untap", "Upkeep", "Draw", "Main1", "Combat_Start", "Combat_Attack", "Combat_Block", "Combat_Damage", "Combat_End", "Main2", "Cleanup", "Next_Turn"}; - phasesImages = new HashMap(); + phasesImages = new HashMap<>(); for (String name : phases) { Image image = getImageFromResource("/phases/phase_" + name.toLowerCase() + ".png", new Rectangle(36, 36)); phasesImages.put(name, image); @@ -106,6 +106,24 @@ public class ImageManagerImpl implements ImageManager { return imageTokenIcon; } + @Override + public BufferedImage getTriggeredAbilityImage() { + if (triggeredAbilityIcon == null) { + Image image = getImageFromResourceTransparent("/card/triggered_ability.png", Color.WHITE, new Rectangle(20, 20)); + triggeredAbilityIcon = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB); + } + return triggeredAbilityIcon; + } + + @Override + public BufferedImage getActivatedAbilityImage() { + if (activatedAbilityIcon == null) { + Image image = getImageFromResourceTransparent("/card/activated_ability.png", Color.WHITE, new Rectangle(20, 20)); + activatedAbilityIcon = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB); + } + return activatedAbilityIcon; + } + @Override public BufferedImage getCopyInformIconImage() { if (imageCopyIcon == null) { @@ -235,6 +253,8 @@ public class ImageManagerImpl implements ImageManager { private static BufferedImage imageNight; private static BufferedImage imageTokenIcon; + private static BufferedImage triggeredAbilityIcon; + private static BufferedImage activatedAbilityIcon; private static BufferedImage imageCopyIcon; private static BufferedImage imageDlgAcceptButton; diff --git a/Mage.Client/src/main/resources/card/activated_ability.png b/Mage.Client/src/main/resources/card/activated_ability.png new file mode 100644 index 00000000000..310ccabf11f Binary files /dev/null and b/Mage.Client/src/main/resources/card/activated_ability.png differ diff --git a/Mage.Client/src/main/resources/card/triggered_ability.png b/Mage.Client/src/main/resources/card/triggered_ability.png new file mode 100644 index 00000000000..861f8ab0564 Binary files /dev/null and b/Mage.Client/src/main/resources/card/triggered_ability.png differ diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 3792d56c57e..dd9c828a836 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -53,6 +53,7 @@ import mage.target.Targets; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import mage.constants.AbilityType; /** * @author BetaSteward_at_googlemail.com @@ -78,6 +79,7 @@ public class CardView extends SimpleCardView { protected MageObjectType mageObjectType; protected boolean isAbility; + protected AbilityType abilityType; protected boolean isToken; protected CardView ability; @@ -452,6 +454,14 @@ public class CardView extends SimpleCardView { return isAbility; } + public AbilityType getAbilityType() { + return abilityType; + } + + public void setAbilityType(AbilityType abilityType) { + this.abilityType = abilityType; + } + public String getPower() { return power; } diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index 0f7c4249b82..6cd9f456cf5 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -34,6 +34,7 @@ import java.util.UUID; import mage.MageObject; import mage.abilities.Modes; import mage.abilities.effects.Effect; +import mage.constants.AbilityType; import mage.constants.MageObjectType; import mage.game.Game; import mage.game.stack.StackAbility; @@ -48,10 +49,12 @@ public class StackAbilityView extends CardView { private static final long serialVersionUID = 1L; private final CardView sourceCard; + private final AbilityType abilityType; public StackAbilityView(Game game, StackAbility ability, String sourceName, CardView sourceCard) { this.id = ability.getId(); this.mageObjectType = MageObjectType.ABILITY_STACK; + this.abilityType = ability.getStackAbility().getAbilityType(); this.sourceCard = sourceCard; this.sourceCard.setMageObjectType(mageObjectType); this.name = "Ability"; @@ -113,4 +116,9 @@ public class StackAbilityView extends CardView { public CardView getSourceCard() { return this.sourceCard; } + + public AbilityType getAbilityType() { + return abilityType; + } + }