diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index dd33b3d57da..f0a25c2890b 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -391,11 +391,17 @@ public class Forge implements ApplicationListener { FThreads.invokeInEdtLater(new Runnable() { @Override public void run() { - //selection - splashScreen.setShowModeSelector(true); - //start background music - SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); - safeToClose = true; + //selection transition + setTransitionScreen(new TransitionScreen(new Runnable() { + @Override + public void run() { + splashScreen.setShowModeSelector(true); + //start background music + SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); + safeToClose = true; + clearTransitionScreen(); + } + }, Forge.takeScreenshot(), false, false, true, false)); } }); } @@ -747,7 +753,7 @@ public class Forge implements ApplicationListener { openHomeDefault(); exited = false; } - }, ScreenUtils.getFrameBufferTexture(), false, false)); + }, Forge.takeScreenshot(), false, false)); } public static void switchToAdventure() { @@ -773,6 +779,10 @@ public class Forge implements ApplicationListener { public static void clearSplashScreen() { splashScreen = null; } + public static TextureRegion takeScreenshot() { + TextureRegion screenShot = ScreenUtils.getFrameBufferTexture(); + return screenShot; + } private static void setCurrentScreen(FScreen screen0) { String toNewScreen = screen0 != null ? screen0.toString() : ""; @@ -989,7 +999,7 @@ public class Forge implements ApplicationListener { if (!(currentScene instanceof ForgeScene)) { if (lastScreenTexture != null) lastScreenTexture.getTexture().dispose(); - lastScreenTexture = ScreenUtils.getFrameBufferTexture(); + lastScreenTexture = Forge.takeScreenshot(); } diff --git a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java index 048034ff3c8..0a5388dd5b3 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java @@ -24,7 +24,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Scaling; -import com.badlogic.gdx.utils.ScreenUtils; import forge.Forge; import forge.adventure.character.*; import forge.adventure.data.*; @@ -678,7 +677,7 @@ public class MapStage extends GameStage { if(isInMap && effect != null) duelScene.setDungeonEffect(effect); Forge.switchScene(SceneType.DuelScene.instance); }); - }, ScreenUtils.getFrameBufferTexture(), true, false)); + }, Forge.takeScreenshot(), true, false)); } }); }); diff --git a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java index b36ff1713f0..0aa1232ec59 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java @@ -4,7 +4,6 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Actor; -import com.badlogic.gdx.utils.ScreenUtils; import com.badlogic.gdx.utils.viewport.Viewport; import forge.Forge; import forge.adventure.character.CharacterSprite; @@ -95,7 +94,7 @@ public class WorldStage extends GameStage implements SaveFileContent { duelScene.initDuels(player, mob); Forge.clearTransitionScreen(); startPause(0.3f, () -> Forge.switchScene(SceneType.DuelScene.instance)); - }, ScreenUtils.getFrameBufferTexture(), true, false)); + }, Forge.takeScreenshot(), true, false)); currentMob = mob; WorldSave.getCurrentSave().autoSave(); }); diff --git a/forge-gui-mobile/src/forge/screens/TransitionScreen.java b/forge-gui-mobile/src/forge/screens/TransitionScreen.java index 7b92e5d866f..870b39a7dd5 100644 --- a/forge-gui-mobile/src/forge/screens/TransitionScreen.java +++ b/forge-gui-mobile/src/forge/screens/TransitionScreen.java @@ -8,20 +8,26 @@ import forge.animation.ForgeAnimation; import forge.assets.FSkin; import forge.assets.FSkinImage; import forge.assets.FSkinTexture; +import forge.sound.SoundSystem; import forge.toolbox.FContainer; public class TransitionScreen extends FContainer { private BGAnimation bgAnimation; Runnable runnable; TextureRegion textureRegion; - boolean matchTransition, isloading; + 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, boolean intro, boolean fadeMusic) { bgAnimation = new BGAnimation(); runnable = proc; textureRegion = screen; matchTransition = enterMatch; isloading = loading; + isIntro = intro; + isFadeMusic = fadeMusic; } @Override @@ -41,6 +47,14 @@ public class TransitionScreen extends FContainer { } else if (percentage > 1) { percentage = 1; } + if (isFadeMusic) { + try { + //fade out volume + SoundSystem.instance.fadeModifier(1-percentage); + } catch (Exception e) { + e.printStackTrace(); + } + } if (isloading) { g.fillRect(Color.BLACK, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); if (FSkinTexture.BG_TEXTURE != null) { @@ -58,6 +72,13 @@ public class TransitionScreen extends FContainer { } else if (matchTransition) { if (textureRegion != null) g.drawWarpImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage); + } else if (isIntro) { + if (textureRegion != null) { + g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); + g.setAlphaComposite(1-percentage); + g.drawImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); + g.setAlphaComposite(oldAlpha); + } } else { if (textureRegion != null) g.drawGrayTransitionImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), false, percentage); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 6198a6d59fc..1c7252a0753 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -6,7 +6,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.badlogic.gdx.utils.ScreenUtils; import forge.adventure.scene.DuelScene; import forge.adventure.scene.SceneType; import forge.ai.GameState; @@ -320,7 +319,7 @@ public class MatchController extends AbstractGuiGame { Forge.setTransitionScreen(new TransitionScreen(() -> { Forge.clearTransitionScreen(); Forge.clearCurrentScreen(); - }, ScreenUtils.getFrameBufferTexture(), false, false)); + }, Forge.takeScreenshot(), false, false)); return; } if (hasLocalPlayers() || getGameView().isMatchOver()) {