From 86ecc75dbeb4f06775f4071795bfd7a22fde3a6a Mon Sep 17 00:00:00 2001 From: drdev Date: Mon, 22 Sep 2014 15:31:09 +0000 Subject: [PATCH] Support showing card associated with achievement using double click or middle/long press --- .../home/settings/VSubmenuAchievements.java | 27 ++++++++++++++++--- .../screens/settings/AchievementsPage.java | 21 +++++++++++++++ .../java/forge/achievement/Achievement.java | 6 +++++ .../forge/achievement/AltWinAchievements.java | 7 +++++ .../achievement/PlaneswalkerAchievements.java | 7 +++++ 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java index c69f80b7594..6fc652396cc 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java @@ -10,7 +10,6 @@ import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; @@ -20,6 +19,7 @@ import forge.assets.FSkinProp; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; +import forge.item.IPaperCard; import forge.screens.home.EMenuGroup; import forge.screens.home.IVSubmenu; import forge.screens.home.VHomeUI; @@ -29,6 +29,8 @@ import forge.toolbox.FSkin.Colors; import forge.toolbox.FSkin.SkinColor; import forge.toolbox.FSkin.SkinFont; import forge.toolbox.FSkin.SkinImage; +import forge.toolbox.special.CardZoomer; +import forge.view.ViewUtil; import net.miginfocom.swing.MigLayout; import javax.swing.*; @@ -78,9 +80,28 @@ public enum VSubmenuAchievements implements IVSubmenu { public void mouseDragged(MouseEvent e) { } }); - trophyCase.addMouseListener(new MouseAdapter() { + trophyCase.addMouseListener(new FMouseAdapter() { @Override - public void mouseExited(MouseEvent e) { + public void onMiddleMouseDown(MouseEvent e) { + showCard(e); + } + @Override + public void onLeftDoubleClick(MouseEvent e) { + showCard(e); + } + + private void showCard(MouseEvent e) { + Achievement achievement = getAchievementAt(e.getX(), e.getY()); + if (achievement != null) { + IPaperCard pc = achievement.getPaperCard(); + if (pc != null) { + CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(ViewUtil.getCardForUi(pc)); + } + } + } + + @Override + public void onMouseExit(MouseEvent e) { trophyCase.setSelectedAchievement(null); } }); diff --git a/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java b/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java index cdf01365443..e38f78015f5 100644 --- a/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java @@ -13,6 +13,8 @@ import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.assets.FSkinTexture; +import forge.card.CardZoom; +import forge.item.IPaperCard; import forge.menu.FDropDown; import forge.screens.FScreen; import forge.screens.TabPageScreen.TabPage; @@ -132,6 +134,9 @@ public class AchievementsPage extends TabPage { @Override public boolean tap(float x, float y, int count) { Achievement achievement = getAchievementAt(x, y); + if (count > 1 && showCard(achievement)) { + return true; + } if (achievement == selectedAchievement) { achievement = null; //unselect if selected achievement tapped again } @@ -139,6 +144,22 @@ public class AchievementsPage extends TabPage { return true; } + @Override + public boolean longPress(float x, float y) { + return showCard(getAchievementAt(x, y)); + } + + private boolean showCard(Achievement achievement) { + if (achievement != null) { + IPaperCard pc = achievement.getPaperCard(); + if (pc != null) { + CardZoom.show(pc); + return true; + } + } + return false; + } + @Override public boolean zoom(float x, float y, float amount) { selectedAchievement = null; //unselect when zooming diff --git a/forge-gui/src/main/java/forge/achievement/Achievement.java b/forge-gui/src/main/java/forge/achievement/Achievement.java index 8cadff58c13..ea147ffbcde 100644 --- a/forge-gui/src/main/java/forge/achievement/Achievement.java +++ b/forge-gui/src/main/java/forge/achievement/Achievement.java @@ -8,6 +8,7 @@ import forge.assets.ISkinImage; import forge.game.Game; import forge.game.player.Player; import forge.interfaces.IGuiBase; +import forge.item.IPaperCard; import forge.properties.ForgeConstants; public abstract class Achievement { @@ -99,6 +100,11 @@ public abstract class Achievement { return best <= commonThreshold; } + //get card associated with this achievement if any + public IPaperCard getPaperCard() { + return null; + } + protected abstract int evaluate(Player player, Game game); private void updateTrophyImage() { diff --git a/forge-gui/src/main/java/forge/achievement/AltWinAchievements.java b/forge-gui/src/main/java/forge/achievement/AltWinAchievements.java index f9321a5125c..8773cbed101 100644 --- a/forge-gui/src/main/java/forge/achievement/AltWinAchievements.java +++ b/forge-gui/src/main/java/forge/achievement/AltWinAchievements.java @@ -5,6 +5,8 @@ import org.apache.commons.lang3.StringUtils; import forge.game.Game; import forge.game.player.Player; import forge.interfaces.IGuiBase; +import forge.item.IPaperCard; +import forge.model.FModel; import forge.properties.ForgeConstants; public class AltWinAchievements extends AchievementCollection { @@ -68,6 +70,11 @@ public class AltWinAchievements extends AchievementCollection { return current + 1; //if this reaches this point, it can be presumed that alternate win condition achieved } + @Override + public IPaperCard getPaperCard() { + return FModel.getMagicDb().getCommonCards().getCard(getKey()); + } + @Override public String getSubTitle() { return current + " Win" + (current != 1 ? "s" : ""); diff --git a/forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java b/forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java index d7d88db5133..415a3069047 100644 --- a/forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java +++ b/forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java @@ -5,6 +5,8 @@ import java.util.HashSet; import forge.game.Game; import forge.game.player.Player; import forge.interfaces.IGuiBase; +import forge.item.IPaperCard; +import forge.model.FModel; import forge.properties.ForgeConstants; public class PlaneswalkerAchievements extends AchievementCollection { @@ -109,6 +111,11 @@ public class PlaneswalkerAchievements extends AchievementCollection { return current + 1; //if this reaches this point, it can be presumed that alternate win condition achieved } + @Override + public IPaperCard getPaperCard() { + return FModel.getMagicDb().getCommonCards().getCard(getKey()); + } + @Override public String getSubTitle() { return current + " Win" + (current != 1 ? "s" : "");