From 286fcd3fbe55b93618d9066c30a55f15ada1d10a Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 8 Aug 2025 20:46:12 +0800 Subject: [PATCH] update progressbar, update boosterdraft readfile also removed unneccesary settings since forge uses shaders for round corners for rendering borders --- forge-gui-mobile/src/forge/Forge.java | 45 +++---------------- .../src/forge/assets/ImageCache.java | 2 +- .../forge/screens/settings/SettingsPage.java | 10 ----- forge-gui/res/languages/de-DE.properties | 4 +- forge-gui/res/languages/en-US.properties | 4 +- forge-gui/res/languages/es-ES.properties | 4 +- forge-gui/res/languages/fr-FR.properties | 4 +- forge-gui/res/languages/it-IT.properties | 4 +- forge-gui/res/languages/ja-JP.properties | 4 +- forge-gui/res/languages/pt-BR.properties | 4 +- forge-gui/res/languages/zh-CN.properties | 4 +- .../forge/gamemodes/limited/BoosterDraft.java | 21 +++++++-- 12 files changed, 48 insertions(+), 62 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 1a86de220a6..2d703814174 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -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 borderlessCardlistkeys = FileUtil.readFile(ForgeConstants.BORDERLESS_CARD_LIST_FILE); - if (borderlessCardlistkeys.isEmpty()) - return; - List 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"); diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index adbf6436e14..27ed870c0b4 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -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()) { diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java index dec14d07fdc..da24d0d79b2 100644 --- a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java @@ -616,16 +616,6 @@ public class SettingsPage extends TabPage { 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")), diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index bed7067b693..0c7bb7dde9c 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -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. \ No newline at end of file +nlReversePromptButton=Wenn diese Option aktiviert ist, sind die Schaltflächen „OK“ und „Cancel“ vertauscht. +lblPrepareDatabase=Datenbank vorbereiten... +lblLoadingGameResources=Spielressourcen werden geladen... \ No newline at end of file diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 38699a91b8e..0dbe90189ea 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -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. \ No newline at end of file +nlReversePromptButton=If enabled, the OK and Cancel Prompt buttons are reversed. +lblPrepareDatabase=Preparing database... +lblLoadingGameResources=Loading game resources... \ No newline at end of file diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 79dd6ce0758..d7070635fbd 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -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. \ No newline at end of file +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... \ No newline at end of file diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index 6cb85389f7c..b2bd7eed4d0 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -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. \ No newline at end of file +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... \ No newline at end of file diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 30923394c94..af7c6ff95ef 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -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. \ No newline at end of file +nlReversePromptButton=Se abilitati, i pulsanti OK e Annulla richiesta sono invertiti. +lblPrepareDatabase=Preparazione del database... +lblLoadingGameResources=Caricamento delle risorse del gioco... \ No newline at end of file diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 46d10b752e0..163ad7cfdf1 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -3526,4 +3526,6 @@ lblEffectDialogDescription=この場所には不思議な魔力が流れてい lblEffectDataHeader=対戦相手全員が得るもの: lblDefeatedDescription=敗北し、続行不可能となったあなたは、最後の力を振り絞ってそのエリアから脱出します。 lblReversePromptButton=逆プロンプトボタン -nlReversePromptButton=有効にすると、[OK] ボタンと [Cancel] ボタンが逆になります。 \ No newline at end of file +nlReversePromptButton=有効にすると、[OK] ボタンと [Cancel] ボタンが逆になります。 +lblPrepareDatabase=データベースを準備しています +lblLoadingGameResources=ゲームリソースを読み込んでいます \ No newline at end of file diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index 958ac9079cf..a12bb9a4c85 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -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. \ No newline at end of file +nlReversePromptButton=Se ativados, os botões OK e Cancelar prompt serão invertidos. +lblPrepareDatabase=Preparando banco de dados... +lblLoadingGameResources=Carregando recursos do jogo... \ No newline at end of file diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 037449dc1bb..73f2ba7d24a 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -3517,4 +3517,6 @@ lblEffectDialogDescription=奇怪的魔法能量在这个地方流动。。。 lblEffectDataHeader=所有对手获得: lblDefeatedDescription=你被击败了,无法继续前进,你用尽最后的力量逃离了该区域。 lblReversePromptButton=反转提示按钮 -nlReversePromptButton=如果启用,则“确定”和“取消提示”按钮将会反转。 \ No newline at end of file +nlReversePromptButton=如果启用,则“确定”和“取消提示”按钮将会反转。 +lblPrepareDatabase=准备数据库 +lblLoadingGameResources=正在加载游戏资源 \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java index 01827e5bb48..0ca0008e83c 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java @@ -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 dfData = FileUtil.readFile(ForgeConstants.DRAFT_DIR + element); - customs.add(CustomLimited.parse(dfData, FModel.getDecks().getCubes())); + if (dList != null) { + List> futures = new ArrayList<>(); + for (final String element : dList) { + if (element.endsWith(FILE_EXT)) { + futures.add(CompletableFuture.supplyAsync(()-> { + final List 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;