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() {
@Override
public void run() {
//selection
//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();
}

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.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));
}
});
});

View File

@@ -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();
});

View File

@@ -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);

View File

@@ -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()) {