From 9209c64399a05124693acb034331ad2c69cc95c4 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 10 Aug 2022 19:31:53 +0800 Subject: [PATCH 1/2] Add progressbar on adventure loading transition --- .../forge/adventure/scene/NewGameScene.java | 3 +- .../forge/adventure/scene/SaveLoadScene.java | 2 +- .../src/forge/screens/TransitionScreen.java | 44 +++++++++++++++++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java b/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java index 43ccb7b11b6..43210b3777f 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java @@ -56,10 +56,9 @@ public class NewGameScene extends UIScene { Config.instance().getConfigData().difficulties[difficulty.getCurrentIndex()], mode.getCurrentIndex()==2, mode.getCurrentIndex()==1, 0);//maybe replace with enum GamePlayerUtil.getGuiPlayer().setName(selectedName.getText()); - Forge.clearTransitionScreen(); Forge.switchScene(SceneType.GameScene.instance); }; - Forge.setTransitionScreen(new TransitionScreen(runnable, null, false, true)); + Forge.setTransitionScreen(new TransitionScreen(runnable, null, false, true, "Generating World...")); return true; } diff --git a/forge-gui-mobile/src/forge/adventure/scene/SaveLoadScene.java b/forge-gui-mobile/src/forge/adventure/scene/SaveLoadScene.java index 5fdc0a007f8..d86ab3d3da0 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/SaveLoadScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/SaveLoadScene.java @@ -143,7 +143,7 @@ public class SaveLoadScene extends UIScene { } else { Forge.clearTransitionScreen(); } - }, null, false, true)); + }, null, false, true, "Generating World...")); } catch (Exception e) { Forge.clearTransitionScreen(); } diff --git a/forge-gui-mobile/src/forge/screens/TransitionScreen.java b/forge-gui-mobile/src/forge/screens/TransitionScreen.java index 870b39a7dd5..3e8578782c1 100644 --- a/forge-gui-mobile/src/forge/screens/TransitionScreen.java +++ b/forge-gui-mobile/src/forge/screens/TransitionScreen.java @@ -1,5 +1,6 @@ package forge.screens; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; import forge.Forge; @@ -8,19 +9,34 @@ import forge.animation.ForgeAnimation; import forge.assets.FSkin; import forge.assets.FSkinImage; import forge.assets.FSkinTexture; +import forge.gui.FThreads; +import forge.gui.GuiBase; import forge.sound.SoundSystem; import forge.toolbox.FContainer; +import forge.toolbox.FProgressBar; public class TransitionScreen extends FContainer { private BGAnimation bgAnimation; + private FProgressBar progressBar; Runnable runnable; TextureRegion textureRegion; + private String message = ""; boolean matchTransition, isloading, isIntro, isFadeMusic; public TransitionScreen(Runnable proc, TextureRegion screen, boolean enterMatch, boolean loading) { this(proc, screen, enterMatch, loading, false, false); } + public TransitionScreen(Runnable proc, TextureRegion screen, boolean enterMatch, boolean loading, String loadingMessage) { + this(proc, screen, enterMatch, loading, false, false, loadingMessage); + } public TransitionScreen(Runnable proc, TextureRegion screen, boolean enterMatch, boolean loading, boolean intro, boolean fadeMusic) { + this(proc, screen, enterMatch, loading, intro, fadeMusic, ""); + } + public TransitionScreen(Runnable proc, TextureRegion screen, boolean enterMatch, boolean loading, boolean intro, boolean fadeMusic, String loadingMessage) { + progressBar = new FProgressBar(); + progressBar.setMaximum(100); + progressBar.setPercentMode(true); + progressBar.setShowETA(false); bgAnimation = new BGAnimation(); runnable = proc; textureRegion = screen; @@ -28,8 +44,12 @@ public class TransitionScreen extends FContainer { isloading = loading; isIntro = intro; isFadeMusic = fadeMusic; + message = loadingMessage; } + public FProgressBar getProgressBar() { + return progressBar; + } @Override protected void doLayout(float width, float height) { @@ -63,12 +83,29 @@ public class TransitionScreen extends FContainer { g.setAlphaComposite(oldAlpha); } float xmod = Forge.getScreenHeight() > 2000 ? 1.5f : 1f; - xmod *= percentage; + xmod *= Forge.isMobileAdventureMode ? 1 : percentage; + float ymod; if (FSkin.hdLogo != null) { + ymod = Forge.getScreenHeight()/2 + (FSkin.hdLogo.getHeight()*xmod)/2; g.drawImage(FSkin.hdLogo, Forge.getScreenWidth()/2 - (FSkin.hdLogo.getWidth()*xmod)/2, Forge.getScreenHeight()/2 - (FSkin.hdLogo.getHeight()*xmod)/2, FSkin.hdLogo.getWidth()*xmod, FSkin.hdLogo.getHeight()*xmod); } else { + ymod = Forge.getScreenHeight()/2 + (FSkinImage.LOGO.getHeight()*xmod)/1.5f; g.drawImage(FSkinImage.LOGO,Forge.getScreenWidth()/2 - (FSkinImage.LOGO.getWidth()*xmod)/2, Forge.getScreenHeight()/2 - (FSkinImage.LOGO.getHeight()*xmod)/1.5f, FSkinImage.LOGO.getWidth()*xmod, FSkinImage.LOGO.getHeight()*xmod); } + //loading progressbar - todo make this accurate when generating world + if (Forge.isMobileAdventureMode) { + float w = Forge.isLandscapeMode() ? Forge.getScreenWidth() / 2 : Forge.getScreenHeight() / 2; + float h = 57f / 450f * (w/2); + float x = (Forge.getScreenWidth() - w) / 2; + float y = ymod + 10; + int multi = ((int) (percentage*100)) < 97 ? (int) (percentage*100) : 100; + progressBar.setBounds(x, y, w, h); + progressBar.setValue(multi); + if (multi == 100 && !message.isEmpty()) { + progressBar.setDescription(message); + } + g.draw(progressBar); + } } else if (matchTransition) { if (textureRegion != null) g.drawWarpImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage); @@ -93,8 +130,9 @@ public class TransitionScreen extends FContainer { @Override protected void onEnd(boolean endingAll) { - if (runnable != null) - runnable.run(); + if (runnable != null) { + FThreads.invokeInEdtNowOrLater(runnable); + } } } From 112a2ce18fac899062540624266035094425fe4d Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 10 Aug 2022 19:35:48 +0800 Subject: [PATCH 2/2] unused imports --- forge-gui-mobile/src/forge/screens/TransitionScreen.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/TransitionScreen.java b/forge-gui-mobile/src/forge/screens/TransitionScreen.java index 3e8578782c1..76b25f028a4 100644 --- a/forge-gui-mobile/src/forge/screens/TransitionScreen.java +++ b/forge-gui-mobile/src/forge/screens/TransitionScreen.java @@ -1,6 +1,5 @@ package forge.screens; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; import forge.Forge; @@ -10,7 +9,6 @@ import forge.assets.FSkin; import forge.assets.FSkinImage; import forge.assets.FSkinTexture; import forge.gui.FThreads; -import forge.gui.GuiBase; import forge.sound.SoundSystem; import forge.toolbox.FContainer; import forge.toolbox.FProgressBar;