mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Support selecting an achievement
This commit is contained in:
@@ -18,6 +18,7 @@ import forge.util.Utils;
|
|||||||
|
|
||||||
public class AchievementsPage extends TabPage<SettingsScreen> {
|
public class AchievementsPage extends TabPage<SettingsScreen> {
|
||||||
private static final float PADDING = Utils.scaleMin(5);
|
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 MIN_SHELVES = 4;
|
||||||
private static final int TROPHIES_PER_SHELVE = 4;
|
private static final int TROPHIES_PER_SHELVE = 4;
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ public class AchievementsPage extends TabPage<SettingsScreen> {
|
|||||||
|
|
||||||
private void setAchievements(AchievementCollection achievements0) {
|
private void setAchievements(AchievementCollection achievements0) {
|
||||||
trophyCase.achievements = achievements0;
|
trophyCase.achievements = achievements0;
|
||||||
|
trophyCase.selectedAchievement = null;
|
||||||
trophyCase.shelfCount = Math.max(achievements0.getCount() % TROPHIES_PER_SHELVE, MIN_SHELVES);
|
trophyCase.shelfCount = Math.max(achievements0.getCount() % TROPHIES_PER_SHELVE, MIN_SHELVES);
|
||||||
trophyCase.revalidate();
|
trophyCase.revalidate();
|
||||||
}
|
}
|
||||||
@@ -63,6 +65,7 @@ public class AchievementsPage extends TabPage<SettingsScreen> {
|
|||||||
private AchievementCollection achievements;
|
private AchievementCollection achievements;
|
||||||
private int shelfCount;
|
private int shelfCount;
|
||||||
private float extraWidth = 0;
|
private float extraWidth = 0;
|
||||||
|
private Achievement selectedAchievement;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) {
|
protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) {
|
||||||
@@ -73,6 +76,51 @@ public class AchievementsPage extends TabPage<SettingsScreen> {
|
|||||||
return new ScrollBounds(scrollWidth, scrollHeight);
|
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
|
@Override
|
||||||
public boolean zoom(float x, float y, float amount) {
|
public boolean zoom(float x, float y, float amount) {
|
||||||
float oldScrollLeft = getScrollLeft();
|
float oldScrollLeft = getScrollLeft();
|
||||||
@@ -177,6 +225,10 @@ public class AchievementsPage extends TabPage<SettingsScreen> {
|
|||||||
if (subTitle != null) {
|
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);
|
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++;
|
trophyCount++;
|
||||||
|
|||||||
Reference in New Issue
Block a user