From 992d1b724d3bd3e77de68df5af8efbfb7dfa33e5 Mon Sep 17 00:00:00 2001 From: drdev Date: Mon, 15 Sep 2014 02:34:54 +0000 Subject: [PATCH] Support selecting an achievement --- .../screens/settings/AchievementsPage.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java b/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java index 7dc345e480f..fa5db7bf28c 100644 --- a/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/AchievementsPage.java @@ -18,6 +18,7 @@ import forge.util.Utils; public class AchievementsPage extends TabPage { private static final float PADDING = Utils.scaleMin(5); + private static final float SELECTED_BORDER_THICKNESS = Utils.scaleMin(1); private static final int MIN_SHELVES = 4; private static final int TROPHIES_PER_SHELVE = 4; @@ -53,6 +54,7 @@ public class AchievementsPage extends TabPage { private void setAchievements(AchievementCollection achievements0) { trophyCase.achievements = achievements0; + trophyCase.selectedAchievement = null; trophyCase.shelfCount = Math.max(achievements0.getCount() % TROPHIES_PER_SHELVE, MIN_SHELVES); trophyCase.revalidate(); } @@ -63,6 +65,7 @@ public class AchievementsPage extends TabPage { private AchievementCollection achievements; private int shelfCount; private float extraWidth = 0; + private Achievement selectedAchievement; @Override protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) { @@ -73,6 +76,51 @@ public class AchievementsPage extends TabPage { return new ScrollBounds(scrollWidth, scrollHeight); } + private Achievement getAchievementAt(float x0, float y0) { + float w = getScrollWidth(); + float scale = w / FSkinTexture.BG_TROPHY_CASE_TOP.getWidth(); + float trophyScale = scale / 3f * 1.8f; + + float shelfHeight = FSkinTexture.BG_TROPHY_CASE_SHELF.getHeight() * scale; + float trophyWidth = FSkinImage.GOLD_TROPHY.getWidth() * trophyScale; + float trophyHeight = FSkinImage.GOLD_TROPHY.getHeight() * trophyScale; + float x = -getScrollLeft() + (w - TROPHIES_PER_SHELVE * trophyWidth) / 2; + float y = -getScrollTop() + FSkinTexture.BG_TROPHY_CASE_TOP.getHeight() * scale + (shelfHeight - trophyHeight - 12 * scale) / 2; + + int trophyCount = 0; + float startX = x; + + for (Achievement achievement : achievements) { + if (trophyCount == TROPHIES_PER_SHELVE) { + trophyCount = 0; + x = startX; + y += shelfHeight; + + if (y >= getHeight()) { + return null; + } + } + + if (x <= x0 && x0 < x + trophyWidth && y <= y0 && y0 < y + shelfHeight) { + return achievement; + } + + trophyCount++; + x += trophyWidth; + } + return null; + } + + @Override + public boolean tap(float x, float y, int count) { + Achievement achievement = getAchievementAt(x, y); + if (achievement == selectedAchievement) { + achievement = null; //unselect if selected achievement tapped again + } + selectedAchievement = achievement; + return true; + } + @Override public boolean zoom(float x, float y, float amount) { float oldScrollLeft = getScrollLeft(); @@ -177,6 +225,10 @@ public class AchievementsPage extends TabPage { if (subTitle != null) { g.drawText(subTitle, subTitleFont, FORE_COLOR, x + plateOffset + plateWidth * 0.075f, plateY + plateHeight * 0.6f, plateWidth * 0.85f, subTitleHeight, false, HAlignment.CENTER, true); } + + if (achievement == selectedAchievement) { + g.drawRect(SELECTED_BORDER_THICKNESS, Color.GREEN, x, y, trophyWidth, shelfHeight); + } } trophyCount++;