diff --git a/forge-gui-mobile/pom.xml b/forge-gui-mobile/pom.xml
index 59fb125d1d2..4e506c14ca6 100644
--- a/forge-gui-mobile/pom.xml
+++ b/forge-gui-mobile/pom.xml
@@ -57,7 +57,7 @@
com.github.tommyettinger
textratypist
- 0.8.1
+ 0.8.2
com.badlogicgames.gdx-controllers
diff --git a/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java b/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java
index e4e30c64f9f..5bfdcc8119e 100644
--- a/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java
+++ b/forge-gui-mobile/src/forge/adventure/scene/PlayerStatisticScene.java
@@ -28,6 +28,7 @@ import forge.card.ColorSet;
import forge.game.GameType;
import forge.localinstance.achievements.Achievement;
import forge.localinstance.achievements.AchievementCollection;
+import forge.localinstance.achievements.PlaneswalkerAchievements;
import forge.model.FModel;
import forge.player.GamePlayerUtil;
import org.apache.commons.lang3.tuple.Pair;
@@ -35,9 +36,9 @@ import org.apache.commons.lang3.tuple.Pair;
import java.util.Map;
public class PlayerStatisticScene extends UIScene {
- Image avatar, avatarBorder, lifeIcon, goldIcon;
+ Image avatar, avatarBorder;
Image colorFrame;
- TextraLabel money, life;
+ TextraLabel money, life, shards;
TextraLabel wins, totalWins;
TextraLabel loss, totalLoss;
TextraLabel winloss, lossWinRatio;
@@ -48,7 +49,6 @@ public class PlayerStatisticScene extends UIScene {
ScrollPane scroller;
Table root;
boolean toggle = false;
- AchievementCollection achievements;
private PlayerStatisticScene() {
super(Forge.isLandscapeMode() ? "ui/statistic.json" : "ui/statistic_portrait.json");
@@ -65,8 +65,7 @@ public class PlayerStatisticScene extends UIScene {
playerName = ui.findActor("playerName");
life = ui.findActor("lifePoints");
money = ui.findActor("money");
- lifeIcon = ui.findActor("lifeIcon");
- goldIcon = ui.findActor("goldIcon");
+ shards = ui.findActor("shards");
wins = ui.findActor("wins");
colorFrame = ui.findActor("colorFrame");
totalWins = ui.findActor("totalWins");
@@ -154,27 +153,8 @@ public class PlayerStatisticScene extends UIScene {
@Override
public void enter() {
super.enter();
- achievements = FModel.getAchievements(GameType.Constructed);
- achievementContainer.clear();
- for (Achievement a : achievements) {
- GameType g = GameType.smartValueOf(a.getKey());
- if (g != null) //skip variants
- continue;
- TextureRegion textureRegion = new TextureRegion(((FBufferedImage) a.getImage()).getTexture());
- textureRegion.flip(true, true);
- Image image = new Image(textureRegion);
- float alpha = a.isActive() ? 1f : 0.25f;
- image.getColor().a = alpha;
- achievementContainer.add(image).height(50).width(40).center().pad(5);
- String value = "[%105]" + a.getDisplayName() + "[%98]";
- String subTitle = a.getSubTitle(true);
- if (subTitle != null)
- value += "\n" + subTitle;
- TextraLabel label = Controls.newTextraLabel(value);
- label.getColor().a = alpha;
- achievementContainer.add(label).left().pad(5);
- achievementContainer.row();
- }
+ updateAchievements(PlaneswalkerAchievements.instance, true);
+ updateAchievements(FModel.getAchievements(GameType.Constructed), false);
scrollContainer.clear();
if (playerName != null) {
@@ -184,10 +164,13 @@ public class PlayerStatisticScene extends UIScene {
avatar.setDrawable(new TextureRegionDrawable(Current.player().avatar()));
}
if (life != null) {
- AdventurePlayer.current().onLifeChange(() -> life.setText(AdventurePlayer.current().getLife() + "/" + AdventurePlayer.current().getMaxLife()));
+ AdventurePlayer.current().onLifeChange(() -> life.setText("[+Life] [BLACK]" + AdventurePlayer.current().getLife() + "/" + AdventurePlayer.current().getMaxLife()));
}
if (money != null) {
- WorldSave.getCurrentSave().getPlayer().onGoldChange(() -> money.setText(String.valueOf(AdventurePlayer.current().getGold())));
+ WorldSave.getCurrentSave().getPlayer().onGoldChange(() -> money.setText("[+Gold] [BLACK]" + AdventurePlayer.current().getGold()));
+ }
+ if (shards != null) {
+ WorldSave.getCurrentSave().getPlayer().onShardsChange(() -> shards.setText("[+Shards] [BLACK]" + AdventurePlayer.current().getShards()));
}
if (totalWins != null) {
totalWins.setText(String.valueOf(Current.player().getStatistic().totalWins()));
@@ -222,4 +205,31 @@ public class PlayerStatisticScene extends UIScene {
}
performTouch(scrollPaneOfActor(scrollContainer)); //can use mouse wheel if available to scroll
}
+ void updateAchievements(AchievementCollection achievementCollection, boolean isPW) {
+ achievementContainer.clear();
+ for (Achievement a : achievementCollection) {
+ if (isPW) {
+ if (!a.isActive()) //skip inactive
+ continue;
+ } else {
+ GameType g = GameType.smartValueOf(a.getKey());
+ if (g != null) //skip variants
+ continue;
+ }
+ TextureRegion textureRegion = new TextureRegion(((FBufferedImage) a.getImage()).getTexture());
+ textureRegion.flip(true, true);
+ Image image = new Image(textureRegion);
+ float alpha = a.isActive() ? 1f : 0.25f;
+ image.getColor().a = alpha;
+ achievementContainer.add(image).height(50).width(40).center().pad(5);
+ String value = "[%105]" + a.getDisplayName() + "[%98]";
+ String subTitle = a.getSubTitle(true);
+ if (subTitle != null)
+ value += "\n" + subTitle;
+ TextraLabel label = Controls.newTextraLabel(value);
+ label.getColor().a = alpha;
+ achievementContainer.add(label).left().pad(5);
+ achievementContainer.row();
+ }
+ }
}
diff --git a/forge-gui-mobile/src/forge/adventure/util/UIActor.java b/forge-gui-mobile/src/forge/adventure/util/UIActor.java
index e8bc111aeb8..31ad2116752 100644
--- a/forge-gui-mobile/src/forge/adventure/util/UIActor.java
+++ b/forge-gui-mobile/src/forge/adventure/util/UIActor.java
@@ -289,7 +289,9 @@ public class UIActor extends Group {
for (ObjectMap.Entry property : entries) {
switch (property.key.toString()) {
case "image":
- Texture t = Forge.getAssets().getTexture(Config.instance().getFile(property.value.toString()));
+ boolean is2D = property.value.toString().startsWith("ui") &&
+ (property.value.toString().contains("minimap") || property.value.toString().contains("hud"));
+ Texture t = Forge.getAssets().getTexture(Config.instance().getFile(property.value.toString()), is2D, false);
TextureRegion tr = new TextureRegion(t);
if (property.value.toString().contains("title_bg")) {
ShaderProgram shaderNightDay = Forge.getGraphics().getShaderNightDay();
diff --git a/forge-gui-mobile/src/forge/assets/Assets.java b/forge-gui-mobile/src/forge/assets/Assets.java
index e78dfa80284..8c1db14dd04 100644
--- a/forge-gui-mobile/src/forge/assets/Assets.java
+++ b/forge-gui-mobile/src/forge/assets/Assets.java
@@ -251,11 +251,16 @@ public class Assets implements Disposable {
public Texture getTexture(FileHandle file) {
return getTexture(file, true);
}
+
public Texture getTexture(FileHandle file, boolean required) {
+ return getTexture(file, false, required);
+ }
+
+ public Texture getTexture(FileHandle file, boolean is2D, boolean required) {
if (file == null || !file.exists()) {
if (!required)
return null;
- System.err.println("Failed to load: " + file +"!. Creating dummy texture.");
+ System.err.println("Failed to load: " + file + "!. Creating dummy texture.");
return getDummy();
}
//internal path can be inside apk or jar..
@@ -269,15 +274,19 @@ public class Assets implements Disposable {
}
Texture t = manager().get(file.path(), Texture.class, false);
if (t == null) {
- manager().load(file.path(), Texture.class, getTextureFilter());
+ if (is2D)
+ manager().load(file.path(), Texture.class, new TextureParameter());
+ else
+ manager().load(file.path(), Texture.class, getTextureFilter());
manager().finishLoadingAsset(file.path());
t = manager().get(file.path(), Texture.class);
}
return t;
}
+
public ParticleEffect getEffect(FileHandle file) {
if (file == null || !file.exists() || !FileType.Absolute.equals(file.type())) {
- System.err.println("Failed to load: " + file +"!.");
+ System.err.println("Failed to load: " + file + "!.");
return null;
}
ParticleEffect effect = manager().get(file.path(), ParticleEffect.class, false);
@@ -310,6 +319,7 @@ public class Assets implements Disposable {
public void loadTexture(FileHandle file) {
loadTexture(file, getTextureFilter());
}
+
public void loadTexture(FileHandle file, TextureParameter parameter) {
try {
if (file == null || !file.exists())
@@ -339,7 +349,7 @@ public class Assets implements Disposable {
textrafonts = new ObjectMap<>();
if (!textrafonts.containsKey("textrafont")) {
Font font = new Font(bitmapFont, 0f, 2f, 0f, 0f);
- font.addAtlas(item_atlas, 0f, 4f, 0f);
+ font.addAtlas(item_atlas, 0f, 6f, 0f);
//problematic atlas since some buttons are small, and this is too big for some buttons, need a way to enable
//this via property
//font.addAtlas(pixelmana_atlas, -90f, 20f, 0f);
@@ -354,7 +364,7 @@ public class Assets implements Disposable {
textrafonts = new ObjectMap<>();
if (!textrafonts.containsKey("keysfont")) {
Font font = new Font(bitmapFont);
- font.addAtlas(keys_atlas, 0f, 4f, 0f);
+ font.addAtlas(keys_atlas, 0f, 6f, 0f);
font.integerPosition = false;
textrafonts.put("keysfont", font);
}
@@ -366,7 +376,7 @@ public class Assets implements Disposable {
textrafonts = new ObjectMap<>();
if (!textrafonts.containsKey(name)) {
Font font = new Font(bitmapFont);
- font.addAtlas(items_atlas, 0f, 4f, 0f);
+ font.addAtlas(items_atlas, 0f, 6f, 0f);
font.integerPosition = false;
textrafonts.put(name, font);
}
@@ -375,7 +385,7 @@ public class Assets implements Disposable {
public Music getMusic(FileHandle file) {
if (file == null || !file.exists() || !FileType.Absolute.equals(file.type())) {
- System.err.println("Failed to load: " + file +"!.");
+ System.err.println("Failed to load: " + file + "!.");
return null;
}
Music music = manager().get(file.path(), Music.class, false);
@@ -389,7 +399,7 @@ public class Assets implements Disposable {
public Sound getSound(FileHandle file) {
if (file == null || !file.exists() || !FileType.Absolute.equals(file.type())) {
- System.err.println("Failed to load: " + file +"!.");
+ System.err.println("Failed to load: " + file + "!.");
return null;
}
Sound sound = manager().get(file.path(), Sound.class, false);
diff --git a/forge-gui-mobile/src/forge/assets/FSkin.java b/forge-gui-mobile/src/forge/assets/FSkin.java
index 8f5ff88bbdd..e209547ea4f 100644
--- a/forge-gui-mobile/src/forge/assets/FSkin.java
+++ b/forge-gui-mobile/src/forge/assets/FSkin.java
@@ -34,7 +34,7 @@ public class FSkin {
public static Texture getLogo() {
if (Forge.isMobileAdventureMode)
- return Forge.getAssets().getTexture(getDefaultSkinFile("adv_logo.png"));
+ return Forge.getAssets().getTexture(getDefaultSkinFile("adv_logo.png"), true, false);
return Forge.getAssets().getTexture(getSkinFile("hd_logo.png"), false);
}
@@ -113,7 +113,7 @@ public class FSkin {
//load theme logo while changing skins
Forge.getAssets().loadTexture(getSkinFile("hd_logo.png"));
- Forge.getAssets().loadTexture(getDefaultSkinFile("adv_logo.png"));
+ Forge.getAssets().loadTexture(getDefaultSkinFile("adv_logo.png"), new TextureLoader.TextureParameter());
Forge.getAssets().loadTexture(getDefaultSkinFile("overlay_alpha.png"));
Forge.getAssets().loadTexture(getDefaultSkinFile("splatter.png"));
@@ -157,14 +157,14 @@ public class FSkin {
//override splashscreen startup
if (Forge.selector.equals("Adventure")) {
if (f3.exists()) {
- Texture advSplash = Forge.getAssets().getTexture(f3);
+ Texture advSplash = Forge.getAssets().getTexture(f3, true, false);
w = advSplash.getWidth();
h = advSplash.getHeight();
splashScreen.setSplashTexture(new TextureRegion(advSplash, 0, 0, w, h - 100));
pxSplash = new Pixmap(f3);
}
if (f4.exists()) {
- Texture advBG = Forge.getAssets().getTexture(f4);
+ Texture advBG = Forge.getAssets().getTexture(f4, true, false);
advBG.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
splashScreen.setSplashBGTexture(advBG);
}
diff --git a/forge-gui-mobile/src/forge/assets/FSkinImage.java b/forge-gui-mobile/src/forge/assets/FSkinImage.java
index 8905122cd05..786b8e62f8e 100644
--- a/forge-gui-mobile/src/forge/assets/FSkinImage.java
+++ b/forge-gui-mobile/src/forge/assets/FSkinImage.java
@@ -522,12 +522,13 @@ public enum FSkinImage implements FImage {
public void load(Pixmap preferredIcons) {
String filename = sourceFile.getFilename();
+ boolean is2D = sourceFile == SourceFile.ADVENTURE;
FileHandle preferredFile = FSkin.getSkinFile(filename);
- Texture texture = Forge.getAssets().getTexture(preferredFile, false);
+ Texture texture = Forge.getAssets().getTexture(preferredFile, is2D, false);
if (texture == null) {
if (preferredFile.exists()) {
try {
- texture = Forge.getAssets().getTexture(preferredFile, false);
+ texture = Forge.getAssets().getTexture(preferredFile, is2D, false);
}
catch (final Exception e) {
System.err.println("Failed to load skin file: " + preferredFile);
@@ -594,11 +595,11 @@ public enum FSkinImage implements FImage {
//use default file if can't use preferred file
FileHandle defaultFile = FSkin.getDefaultSkinFile(filename);
- texture = Forge.getAssets().getTexture(defaultFile, false);
+ texture = Forge.getAssets().getTexture(defaultFile, is2D, false);
if (texture == null) {
if (defaultFile.exists()) {
try {
- texture = Forge.getAssets().getTexture(defaultFile, false);
+ texture = Forge.getAssets().getTexture(defaultFile, is2D, false);
}
catch (final Exception e) {
System.err.println("Failed to load skin file: " + defaultFile);
diff --git a/forge-gui-mobile/src/forge/screens/ClosingScreen.java b/forge-gui-mobile/src/forge/screens/ClosingScreen.java
index 9e0a55d3767..52ae8ae09bc 100644
--- a/forge-gui-mobile/src/forge/screens/ClosingScreen.java
+++ b/forge-gui-mobile/src/forge/screens/ClosingScreen.java
@@ -21,7 +21,7 @@ public class ClosingScreen extends FContainer {
private boolean drawStatic = false;
private FileHandle adv_logo = getSkinFile("adv_logo.png");
private FileHandle existingLogo = adv_logo.exists() ? adv_logo : getDefaultSkinFile("adv_logo.png");
- private Texture logo = existingLogo.exists() && Forge.advStartup ? Forge.getAssets().getTexture(existingLogo) : FSkin.getLogo();
+ private Texture logo = existingLogo.exists() && Forge.advStartup ? Forge.getAssets().getTexture(existingLogo, true, false) : FSkin.getLogo();
public ClosingScreen(boolean restart0) {
bgAnimation = new BGAnimation();
diff --git a/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java b/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java
index 826d434b82c..9e7f7bbd770 100644
--- a/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java
+++ b/forge-gui-mobile/src/forge/screens/home/AdventureScreen.java
@@ -56,6 +56,7 @@ public class AdventureScreen extends LaunchScreen {
@Override
protected void startMatch() {
+ Forge.isMobileAdventureMode = true; //set early for the transition logo
Forge.switchToAdventure();
}
public static void preload() {
diff --git a/forge-gui/res/adventure/Shandalar/ui/statistic.json b/forge-gui/res/adventure/Shandalar/ui/statistic.json
index 2a0886907b2..0e901284a71 100644
--- a/forge-gui/res/adventure/Shandalar/ui/statistic.json
+++ b/forge-gui/res/adventure/Shandalar/ui/statistic.json
@@ -136,24 +136,6 @@
"x": 315,
"y": 224
},
- {
- "type": "Image",
- "name": "lifeIcon",
- "image": "ui/life.png",
- "x": 392,
- "y": 40,
- "width": 16,
- "height": 16
- },
- {
- "type": "Image",
- "name": "goldIcon",
- "image": "ui/money.png",
- "x": 392,
- "y": 60,
- "width": 16,
- "height": 16
- },
{
"type": "Label",
"name": "playerName",
@@ -166,19 +148,25 @@
{
"type": "Label",
"name": "lifePoints",
- "fontColor":"black",
"width": 64,
"height": 16,
- "x": 410,
+ "x": 394,
"y": 40
},
{
"type": "Label",
"name": "money",
- "fontColor":"black",
"width": 64,
"height": 16,
- "x": 410,
+ "x": 394,
+ "y": 80
+ },
+ {
+ "type": "Label",
+ "name": "shards",
+ "width": 64,
+ "height": 16,
+ "x": 394,
"y": 60
},
{
diff --git a/forge-gui/res/adventure/Shandalar/ui/statistic_portrait.json b/forge-gui/res/adventure/Shandalar/ui/statistic_portrait.json
index ba4ec5ebe02..9f01117d94d 100644
--- a/forge-gui/res/adventure/Shandalar/ui/statistic_portrait.json
+++ b/forge-gui/res/adventure/Shandalar/ui/statistic_portrait.json
@@ -136,40 +136,28 @@
"height": 24,
"fontColor":"black"
},
- {
- "type": "Image",
- "name": "lifeIcon",
- "image": "ui/life.png",
- "x": 98,
- "y": 22,
- "width": 16,
- "height": 16
- },
- {
- "type": "Image",
- "name": "goldIcon",
- "image": "ui/money.png",
- "x": 98,
- "y": 42,
- "width": 16,
- "height": 16
- },
{
"type": "Label",
"name": "lifePoints",
- "fontColor":"black",
"width": 64,
"height": 16,
- "x": 118,
+ "x": 98,
"y": 22
},
{
"type": "Label",
"name": "money",
- "fontColor":"black",
"width": 64,
"height": 16,
- "x": 118,
+ "x": 98,
+ "y": 42
+ },
+ {
+ "type": "Label",
+ "name": "shards",
+ "width": 64,
+ "height": 16,
+ "x": 170,
"y": 42
},
{