Merge pull request #506 from kevlahnota/master

update transition screen
This commit is contained in:
Anthony Calosa
2022-05-26 19:13:56 +08:00
committed by GitHub
5 changed files with 42 additions and 14 deletions

View File

@@ -391,11 +391,17 @@ public class Forge implements ApplicationListener {
FThreads.invokeInEdtLater(new Runnable() { FThreads.invokeInEdtLater(new Runnable() {
@Override @Override
public void run() { public void run() {
//selection //selection transition
splashScreen.setShowModeSelector(true); setTransitionScreen(new TransitionScreen(new Runnable() {
//start background music @Override
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); public void run() {
safeToClose = true; 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(); openHomeDefault();
exited = false; exited = false;
} }
}, ScreenUtils.getFrameBufferTexture(), false, false)); }, Forge.takeScreenshot(), false, false));
} }
public static void switchToAdventure() { public static void switchToAdventure() {
@@ -773,6 +779,10 @@ public class Forge implements ApplicationListener {
public static void clearSplashScreen() { public static void clearSplashScreen() {
splashScreen = null; splashScreen = null;
} }
public static TextureRegion takeScreenshot() {
TextureRegion screenShot = ScreenUtils.getFrameBufferTexture();
return screenShot;
}
private static void setCurrentScreen(FScreen screen0) { private static void setCurrentScreen(FScreen screen0) {
String toNewScreen = screen0 != null ? screen0.toString() : ""; String toNewScreen = screen0 != null ? screen0.toString() : "";
@@ -989,7 +999,7 @@ public class Forge implements ApplicationListener {
if (!(currentScene instanceof ForgeScene)) { if (!(currentScene instanceof ForgeScene)) {
if (lastScreenTexture != null) if (lastScreenTexture != null)
lastScreenTexture.getTexture().dispose(); lastScreenTexture.getTexture().dispose();
lastScreenTexture = ScreenUtils.getFrameBufferTexture(); lastScreenTexture = Forge.takeScreenshot();
} }

View File

@@ -24,7 +24,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Scaling; import com.badlogic.gdx.utils.Scaling;
import com.badlogic.gdx.utils.ScreenUtils;
import forge.Forge; import forge.Forge;
import forge.adventure.character.*; import forge.adventure.character.*;
import forge.adventure.data.*; import forge.adventure.data.*;
@@ -678,7 +677,7 @@ public class MapStage extends GameStage {
if(isInMap && effect != null) duelScene.setDungeonEffect(effect); if(isInMap && effect != null) duelScene.setDungeonEffect(effect);
Forge.switchScene(SceneType.DuelScene.instance); Forge.switchScene(SceneType.DuelScene.instance);
}); });
}, ScreenUtils.getFrameBufferTexture(), true, false)); }, Forge.takeScreenshot(), true, false));
} }
}); });
}); });

View File

@@ -4,7 +4,6 @@ import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.viewport.Viewport; import com.badlogic.gdx.utils.viewport.Viewport;
import forge.Forge; import forge.Forge;
import forge.adventure.character.CharacterSprite; import forge.adventure.character.CharacterSprite;
@@ -95,7 +94,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
duelScene.initDuels(player, mob); duelScene.initDuels(player, mob);
Forge.clearTransitionScreen(); Forge.clearTransitionScreen();
startPause(0.3f, () -> Forge.switchScene(SceneType.DuelScene.instance)); startPause(0.3f, () -> Forge.switchScene(SceneType.DuelScene.instance));
}, ScreenUtils.getFrameBufferTexture(), true, false)); }, Forge.takeScreenshot(), true, false));
currentMob = mob; currentMob = mob;
WorldSave.getCurrentSave().autoSave(); WorldSave.getCurrentSave().autoSave();
}); });

View File

@@ -8,20 +8,26 @@ import forge.animation.ForgeAnimation;
import forge.assets.FSkin; import forge.assets.FSkin;
import forge.assets.FSkinImage; import forge.assets.FSkinImage;
import forge.assets.FSkinTexture; import forge.assets.FSkinTexture;
import forge.sound.SoundSystem;
import forge.toolbox.FContainer; import forge.toolbox.FContainer;
public class TransitionScreen extends FContainer { public class TransitionScreen extends FContainer {
private BGAnimation bgAnimation; private BGAnimation bgAnimation;
Runnable runnable; Runnable runnable;
TextureRegion textureRegion; TextureRegion textureRegion;
boolean matchTransition, isloading; boolean matchTransition, isloading, isIntro, isFadeMusic;
public TransitionScreen(Runnable proc, TextureRegion screen, boolean enterMatch, boolean loading) { 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(); bgAnimation = new BGAnimation();
runnable = proc; runnable = proc;
textureRegion = screen; textureRegion = screen;
matchTransition = enterMatch; matchTransition = enterMatch;
isloading = loading; isloading = loading;
isIntro = intro;
isFadeMusic = fadeMusic;
} }
@Override @Override
@@ -41,6 +47,14 @@ public class TransitionScreen extends FContainer {
} else if (percentage > 1) { } else if (percentage > 1) {
percentage = 1; percentage = 1;
} }
if (isFadeMusic) {
try {
//fade out volume
SoundSystem.instance.fadeModifier(1-percentage);
} catch (Exception e) {
e.printStackTrace();
}
}
if (isloading) { if (isloading) {
g.fillRect(Color.BLACK, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight()); g.fillRect(Color.BLACK, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight());
if (FSkinTexture.BG_TEXTURE != null) { if (FSkinTexture.BG_TEXTURE != null) {
@@ -58,6 +72,13 @@ public class TransitionScreen extends FContainer {
} else if (matchTransition) { } else if (matchTransition) {
if (textureRegion != null) if (textureRegion != null)
g.drawWarpImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage); 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 { } else {
if (textureRegion != null) if (textureRegion != null)
g.drawGrayTransitionImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), false, percentage); g.drawGrayTransitionImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), false, percentage);

View File

@@ -6,7 +6,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.badlogic.gdx.utils.ScreenUtils;
import forge.adventure.scene.DuelScene; import forge.adventure.scene.DuelScene;
import forge.adventure.scene.SceneType; import forge.adventure.scene.SceneType;
import forge.ai.GameState; import forge.ai.GameState;
@@ -320,7 +319,7 @@ public class MatchController extends AbstractGuiGame {
Forge.setTransitionScreen(new TransitionScreen(() -> { Forge.setTransitionScreen(new TransitionScreen(() -> {
Forge.clearTransitionScreen(); Forge.clearTransitionScreen();
Forge.clearCurrentScreen(); Forge.clearCurrentScreen();
}, ScreenUtils.getFrameBufferTexture(), false, false)); }, Forge.takeScreenshot(), false, false));
return; return;
} }
if (hasLocalPlayers() || getGameView().isMatchOver()) { if (hasLocalPlayers() || getGameView().isMatchOver()) {