update progressbar, update boosterdraft readfile

also removed unneccesary settings since forge uses shaders for round corners for rendering borders
This commit is contained in:
Anthony Calosa
2025-08-08 20:46:12 +08:00
parent 00332ff3fe
commit 286fcd3fbe
12 changed files with 48 additions and 62 deletions

View File

@@ -48,7 +48,6 @@ import forge.sound.SoundSystem;
import forge.toolbox.*;
import forge.util.*;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
@@ -102,7 +101,6 @@ public class Forge implements ApplicationListener {
public static boolean animatedCardTapUntap = false;
public static String enableUIMask = "Crop";
public static String selector = "Default";
public static boolean enablePreloadExtendedArt = false;
public static boolean isTabletDevice = false;
public static String locale = "en-US";
public Assets assets;
@@ -244,27 +242,8 @@ public class Forge implements ApplicationListener {
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblLoadingCardTranslations"));
CardTranslation.preloadTranslation(locale, ForgeConstants.LANG_DIR);
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblFinishingStartup"));
//add reminder to preload
if (enablePreloadExtendedArt) {
if (autoCache)
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblPreloadExtendedArt") + "\nDetected RAM: " + totalDeviceRAM + "MB. Cache size: " + cacheSize);
else
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblPreloadExtendedArt"));
} else {
if (autoCache)
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblFinishingStartup") + "\nDetected RAM: " + totalDeviceRAM + "MB. Cache size: " + cacheSize);
else
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblFinishingStartup"));
}
Gdx.app.postRunnable(() -> {
afterDbLoaded();
/* call preloadExtendedArt here, if we put it above we will *
* get error: No OpenGL context found in the current thread. */
preloadExtendedArt();
});
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblPrepareDatabase"));
Gdx.app.postRunnable(this::afterDbLoaded);
};
//see if app or assets need updating
FThreads.invokeInBackgroundThread(() -> AssetsDownloader.checkForUpdates(exited, runnable));
@@ -303,22 +282,6 @@ public class Forge implements ApplicationListener {
return currentScene;
}
private void preloadExtendedArt() {
if (!enablePreloadExtendedArt || !enableUIMask.equals("Full"))
return;
List<String> borderlessCardlistkeys = FileUtil.readFile(ForgeConstants.BORDERLESS_CARD_LIST_FILE);
if (borderlessCardlistkeys.isEmpty())
return;
List<String> filteredkeys = new ArrayList<>();
for (String cardname : borderlessCardlistkeys) {
File image = new File(ForgeConstants.CACHE_CARD_PICS_DIR + ForgeConstants.PATH_SEPARATOR + cardname + ".jpg");
if (image.exists())
filteredkeys.add(cardname);
}
if (!filteredkeys.isEmpty())
ImageCache.getInstance().preloadCache(filteredkeys);
}
private void preloadBoosterDrafts() {
//preloading of custom drafts
BoosterDraft.initializeCustomDrafts();
@@ -384,6 +347,10 @@ public class Forge implements ApplicationListener {
}
}
protected void afterDbLoaded() {
if (GuiBase.isAndroid() && autoCache)
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblFinishingStartup") + "\nDetected RAM: " + totalDeviceRAM + "MB. Cache size: " + cacheSize);
else
getSplashScreen().getProgressBar().setDescription(getLocalizer().getMessage("lblFinishingStartup"));
//override transition & title bg
try {
FileHandle transitionFile = Config.instance().getFile("ui/transition.png");

View File

@@ -407,7 +407,7 @@ public class ImageCache {
public void preloadCache(Deck deck) {
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES))
return;
if (deck == null || !Forge.enablePreloadExtendedArt)
if (deck == null)
return;
if (deck.getAllCardsInASinglePool().toFlatList().size() <= 100) {
for (PaperCard p : deck.getAllCardsInASinglePool().toFlatList()) {

View File

@@ -616,16 +616,6 @@ public class SettingsPage extends TabPage<SettingsScreen> {
ImageCache.getInstance().disposeTextures();
}
}, 4);
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART,
Forge.getLocalizer().getMessage("lblPreloadExtendedArtCards"),
Forge.getLocalizer().getMessage("nlPreloadExtendedArtCards")){
@Override
public void select() {
super.select();
//update
Forge.enablePreloadExtendedArt = FModel.getPreferences().getPrefBoolean(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART);
}
},4);
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_MATCH_SCROLL_INDICATOR,
Forge.getLocalizer().getMessage("lblMatchScrollIndicator"),
Forge.getLocalizer().getMessage("nlMatchScrollIndicator")),

View File

@@ -3527,4 +3527,6 @@ lblEffectDialogDescription=An diesem Ort fließen seltsame magische Energien...
lblEffectDataHeader=Alle Gegner erhalten:
lblDefeatedDescription=Sie sind besiegt und können nicht weitermachen. Mit letzter Kraft versuchen Sie, aus dem Gebiet zu entkommen.
lblReversePromptButton=Umgekehrte Eingabeaufforderungsschaltflächen
nlReversePromptButton=Wenn diese Option aktiviert ist, sind die Schaltflächen „OK“ und „Cancel“ vertauscht.
nlReversePromptButton=Wenn diese Option aktiviert ist, sind die Schaltflächen „OK“ und „Cancel“ vertauscht.
lblPrepareDatabase=Datenbank vorbereiten...
lblLoadingGameResources=Spielressourcen werden geladen...

View File

@@ -3274,4 +3274,6 @@ lblEffectDialogDescription=Strange magical energies flow within this place...
lblEffectDataHeader=All opponents get:
lblDefeatedDescription=Defeated and unable to continue, you use the last of your power to escape the area.
lblReversePromptButton=Reversed Prompt Buttons
nlReversePromptButton=If enabled, the OK and Cancel Prompt buttons are reversed.
nlReversePromptButton=If enabled, the OK and Cancel Prompt buttons are reversed.
lblPrepareDatabase=Preparing database...
lblLoadingGameResources=Loading game resources...

View File

@@ -3531,4 +3531,6 @@ lblEffectDialogDescription=Extrañas energías mágicas fluyen dentro de este lu
lblEffectDataHeader=Todos los oponentes obtienen:
lblDefeatedDescription=Derrotado e incapaz de continuar, utilizas lo último de tu poder para escapar del área.
lblReversePromptButton=Botones de aviso invertidos
nlReversePromptButton=Si esta opción está habilitada, los botones Aceptar y Cancelar solicitud se invierten.
nlReversePromptButton=Si esta opción está habilitada, los botones Aceptar y Cancelar solicitud se invierten.
lblPrepareDatabase=Preparando la base de datos...
lblLoadingGameResources=Cargando recursos del juego...

View File

@@ -3532,4 +3532,6 @@ lblEffectDialogDescription=D'étranges énergies magiques circulent dans ce lieu
lblEffectDataHeader=Tous les adversaires obtiennent:
lblDefeatedDescription=Vaincu et incapable de continuer, vous utilisez le reste de votre pouvoir pour vous échapper de la zone.
lblReversePromptButton=Boutons d'invite inversés
nlReversePromptButton=Si cette option est activée, les boutons OK et Annuler sont inversés.
nlReversePromptButton=Si cette option est activée, les boutons OK et Annuler sont inversés.
lblPrepareDatabase=Préparation de la base de données...
lblLoadingGameResources=Chargement des ressources du jeu...

View File

@@ -3530,4 +3530,6 @@ lblEffectDialogDescription=In questo luogo fluiscono strane energie magiche...
lblEffectDataHeader=Tutti gli avversari ottengono:
lblDefeatedDescription=Sconfitto e impossibilitato a proseguire, usi le ultime energie che ti restano per fuggire dalla zona.
lblReversePromptButton=Pulsanti di richiesta invertiti
nlReversePromptButton=Se abilitati, i pulsanti OK e Annulla richiesta sono invertiti.
nlReversePromptButton=Se abilitati, i pulsanti OK e Annulla richiesta sono invertiti.
lblPrepareDatabase=Preparazione del database...
lblLoadingGameResources=Caricamento delle risorse del gioco...

View File

@@ -3526,4 +3526,6 @@ lblEffectDialogDescription=この場所には不思議な魔力が流れてい
lblEffectDataHeader=対戦相手全員が得るもの:
lblDefeatedDescription=敗北し、続行不可能となったあなたは、最後の力を振り絞ってそのエリアから脱出します。
lblReversePromptButton=逆プロンプトボタン
nlReversePromptButton=有効にすると、[OK] ボタンと [Cancel] ボタンが逆になります。
nlReversePromptButton=有効にすると、[OK] ボタンと [Cancel] ボタンが逆になります。
lblPrepareDatabase=データベースを準備しています
lblLoadingGameResources=ゲームリソースを読み込んでいます

View File

@@ -3616,4 +3616,6 @@ lblEffectDialogDescription=Estranhas energias mágicas fluem dentro deste lugar.
lblEffectDataHeader=Todos os oponentes recebem:
lblDefeatedDescription=Derrotado e incapaz de continuar, você usa o que resta de seu poder para escapar da área.
lblReversePromptButton=Botões de prompt invertidos
nlReversePromptButton=Se ativados, os botões OK e Cancelar prompt serão invertidos.
nlReversePromptButton=Se ativados, os botões OK e Cancelar prompt serão invertidos.
lblPrepareDatabase=Preparando banco de dados...
lblLoadingGameResources=Carregando recursos do jogo...

View File

@@ -3517,4 +3517,6 @@ lblEffectDialogDescription=奇怪的魔法能量在这个地方流动。。。
lblEffectDataHeader=所有对手获得:
lblDefeatedDescription=你被击败了,无法继续前进,你用尽最后的力量逃离了该区域。
lblReversePromptButton=反转提示按钮
nlReversePromptButton=如果启用,则“确定”和“取消提示”按钮将会反转。
nlReversePromptButton=如果启用,则“确定”和“取消提示”按钮将会反转。
lblPrepareDatabase=准备数据库
lblLoadingGameResources=正在加载游戏资源

View File

@@ -39,6 +39,7 @@ import org.apache.commons.lang3.ArrayUtils;
import java.io.File;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Predicate;
import java.util.function.Supplier;
@@ -330,11 +331,23 @@ public class BoosterDraft implements IBoosterDraft {
dList = dFolder.list();
for (final String element : dList) {
if (element.endsWith(FILE_EXT)) {
final List<String> dfData = FileUtil.readFile(ForgeConstants.DRAFT_DIR + element);
customs.add(CustomLimited.parse(dfData, FModel.getDecks().getCubes()));
if (dList != null) {
List<CompletableFuture<?>> futures = new ArrayList<>();
for (final String element : dList) {
if (element.endsWith(FILE_EXT)) {
futures.add(CompletableFuture.supplyAsync(()-> {
final List<String> dfData = FileUtil.readFile(ForgeConstants.DRAFT_DIR + element);
customs.add(CustomLimited.parse(dfData, FModel.getDecks().getCubes()));
return null;
}).exceptionally(ex -> {
ex.printStackTrace();
return null;
}));
}
}
CompletableFuture<?>[] futuresArray = futures.toArray(new CompletableFuture<?>[0]);
CompletableFuture.allOf(futuresArray).join();
futures.clear();
}
}
return customs;