Merge pull request #1970 from kevlahnota/newmaster2

update match transition
This commit is contained in:
Anthony Calosa
2022-11-27 08:44:20 +08:00
committed by GitHub
9 changed files with 96 additions and 18 deletions

View File

@@ -45,6 +45,8 @@ import forge.toolbox.*;
import forge.util.*;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
public class Forge implements ApplicationListener {
@@ -174,6 +176,7 @@ public class Forge implements ApplicationListener {
Gdx.input.setCatchKey(Keys.BACK, true);
destroyThis = true; //Prevent back()
ForgePreferences prefs = new ForgePreferences();
if (Files.exists(Paths.get(ForgeConstants.DEFAULT_SKINS_DIR+ForgeConstants.ADV_TEXTURE_BG_FILE)))
selector = prefs.getPref(FPref.UI_SELECTOR_MODE);
String skinName;
if (FileUtil.doesFileExist(ForgeConstants.MAIN_PREFS_FILE)) {
@@ -323,6 +326,7 @@ public class Forge implements ApplicationListener {
//continuous rendering is needed for adventure mode
startContinuousRendering();
GuiBase.setIsAdventureMode(true);
advStartup = false;
isMobileAdventureMode = true;
if (GuiBase.isAndroid()) //force it for adventure mode
altZoneTabs = true;
@@ -764,8 +768,20 @@ public class Forge implements ApplicationListener {
}
public static void clearTransitionScreen() {
clearTransitionScreen(false);
}
public static void clearTransitionScreen(boolean disableMatchTransition) {
if (transitionScreen != null) {
if (disableMatchTransition) {
transitionScreen.disableMatchTransition();
transitionScreen = null;
}
if (!disableMatchTransition && transitionScreen.isMatchTransition()) {
return;
}
transitionScreen = null;
}
}
public static void clearSplashScreen() {
splashScreen = null;
@@ -1012,6 +1028,8 @@ public class Forge implements ApplicationListener {
currentScene = newScene;
currentScene.enter();
if (currentScene instanceof DuelScene)
Forge.clearTransitionScreen(true);
return true;
}

View File

@@ -44,6 +44,7 @@ public class Graphics {
private final ShaderProgram shaderNightDay = new ShaderProgram(Shaders.vertexShaderDayNight, Shaders.fragmentShaderDayNight);
private final ShaderProgram shaderPixelate = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragPixelateShader);
private final ShaderProgram shaderPixelateWarp = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragPixelateShaderWarp);
private final ShaderProgram shaderChromaticAbberation = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragChromaticAbberation);
private Texture dummyTexture = null;
@@ -821,6 +822,25 @@ public class Graphics {
setAlphaComposite(oldalpha);
}
}
public void drawChromatic(TextureRegion image, float x, float y, float w, float h, Float time) {
if (image == null)
return;
if (time != null) {
batch.end();
shaderChromaticAbberation.bind();
shaderChromaticAbberation.setUniformf("u_time", time);
batch.setShader(shaderChromaticAbberation);
batch.begin();
//draw
batch.draw(image, x, y, w, h);
//reset
batch.end();
batch.setShader(null);
batch.begin();
} else {
drawImage(image, x, y, w, h);
}
}
public void drawPixelated(FImage image, float x, float y, float w, float h, Float amount) {
if (image == null)
return;
@@ -868,10 +888,10 @@ public class Graphics {
batch.end();
shaderPixelateWarp.bind();
shaderPixelateWarp.setUniformf("u_resolution", image.getRegionWidth(), image.getRegionHeight());
shaderPixelateWarp.setUniformf("u_cellSize", amount*6);
shaderPixelateWarp.setUniformf("u_amount", 0.2f);
shaderPixelateWarp.setUniformf("u_cellSize", amount);
shaderPixelateWarp.setUniformf("u_amount", 0.2f*amount);
shaderPixelateWarp.setUniformf("u_speed", 0.5f);
shaderPixelateWarp.setUniformf("u_time", amount);
shaderPixelateWarp.setUniformf("u_time", 0.8f);
batch.setShader(shaderPixelateWarp);
batch.begin();
//draw

View File

@@ -42,6 +42,34 @@ public class Shaders {
" v_texCoords = a_texCoord0;\n" +
" gl_Position = u_projTrans * a_position;\n" +
"}";
public static final String fragChromaticAbberation="#ifdef GL_ES\n" +
"#define PRECISION mediump\n" +
"precision PRECISION float;\n" +
"precision PRECISION int;\n" +
"#else\n" +
"#define PRECISION\n" +
"#endif\n" +
"\n" +
"varying vec2 v_texCoords;\n" +
"uniform sampler2D u_texture;\n" +
"uniform float u_time;\n" +
"\n" +
"void main() {\n" +
"\tvec2 uv = v_texCoords;\n" +
"\tfloat amount = 0.0;\n" +
"\tamount = (1.0 + sin(u_time*6.0)) * 0.5;\n" +
"\tamount *= 1.0 + sin(u_time*16.0) * 0.5;\n" +
"\tamount *= 1.0 + sin(u_time*19.0) * 0.5;\n" +
"\tamount *= 1.0 + sin(u_time*27.0) * 0.5;\n" +
"\tamount = pow(amount, 3.0);\n" +
"\tamount *= 0.05;\n" +
" vec3 col;\n" +
" col.r = texture2D(u_texture, vec2(uv.x+amount,uv.y)).r;\n" +
" col.g = texture2D(u_texture, uv ).g;\n" +
" col.b = texture2D(u_texture, vec2(uv.x-amount,uv.y)).b;\n" +
"\tcol *= (1.0 - amount * 0.5);\n" +
" gl_FragColor = vec4(col,1.0);\n" +
"}";
public static final String fragPixelateShader = "#ifdef GL_ES\n" +
"#define PRECISION mediump\n" +
"precision PRECISION float;\n" +

View File

@@ -210,7 +210,6 @@ public class ArenaScene extends UIScene implements IAfterMatch {
FThreads.invokeInEdtNowOrLater(() -> {
Forge.setTransitionScreen(new TransitionScreen(() -> {
duelScene.initDuels(WorldStage.getInstance().getPlayerSprite(), enemies.get(enemies.size-1));
Forge.clearTransitionScreen();
Forge.switchScene(DuelScene.instance());
}, Forge.takeScreenshot(), true, false));
});

View File

@@ -72,7 +72,7 @@ public class GameScene extends HudScene {
location = forHeader? TextUtil.capitalize(data.name)+" Map" : data.name;
} catch (Exception e) {
e.printStackTrace();
location = "";
location = forHeader ? "Waste Map" : "waste";
}
}
return location;

View File

@@ -693,11 +693,9 @@ public class MapStage extends GameStage {
isLoadingMatch = true;
Forge.setTransitionScreen(new TransitionScreen(() -> {
duelScene.initDuels(player, mob);
Forge.clearTransitionScreen();
startPause(0.3f, () -> {
if (isInMap && effect != null) duelScene.setDungeonEffect(effect);
if (isInMap && effect != null)
duelScene.setDungeonEffect(effect);
Forge.switchScene(DuelScene.instance());
});
}, Forge.takeScreenshot(), true, false));
}
});

View File

@@ -129,8 +129,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
FThreads.invokeInEdtNowOrLater(() -> {
Forge.setTransitionScreen(new TransitionScreen(() -> {
duelScene.initDuels(player, mob);
Forge.clearTransitionScreen();
startPause(0.3f, () -> Forge.switchScene(DuelScene.instance()));
Forge.switchScene(DuelScene.instance());
}, Forge.takeScreenshot(), true, false));
currentMob = mob;
WorldSave.getCurrentSave().autoSave();

View File

@@ -158,7 +158,7 @@ public class SplashScreen extends FContainer {
String version = "v. " + Forge.CURRENT_VERSION;
g.drawText(version, disclaimerFont, FProgressBar.SEL_FORE_COLOR, x, getHeight() - disclaimerHeight, w, disclaimerHeight, false, Align.center, true);
progressBar.setBounds(x + padding, Forge.getScreenHeight() - h2 * 2f, w2, h2);
progressBar.setBounds((Forge.getScreenWidth() - w2)/2, Forge.getScreenHeight() - h2 * 2f, w2, h2);
g.draw(progressBar);
}
public void drawBackground(Graphics g) {

View File

@@ -9,9 +9,11 @@ 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;
import forge.util.MyRandom;
public class TransitionScreen extends FContainer {
private BGAnimation bgAnimation;
@@ -43,7 +45,7 @@ public class TransitionScreen extends FContainer {
isIntro = intro;
isFadeMusic = fadeMusic;
message = loadingMessage;
Forge.advStartup = Forge.selector.equals("Adventure");
Forge.advStartup = intro && Forge.selector.equals("Adventure");
}
public FProgressBar getProgressBar() {
@@ -53,6 +55,12 @@ public class TransitionScreen extends FContainer {
protected void doLayout(float width, float height) {
}
public boolean isMatchTransition() {
return matchTransition;
}
public void disableMatchTransition() {
matchTransition = false;
}
private class BGAnimation extends ForgeAnimation {
float DURATION = 0.6f;
@@ -107,8 +115,16 @@ public class TransitionScreen extends FContainer {
g.draw(progressBar);
}
} else if (matchTransition) {
if (textureRegion != null)
g.drawPixelatedWarp(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), 2.6f-(1*percentage));
if (textureRegion != null) {
if (GuiBase.isAndroid()) {
g.drawChromatic(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage);
} else {
int max = Forge.isLandscapeMode() ? Forge.getScreenHeight() / 32 : Forge.getScreenWidth() / 32;
int min = Forge.isLandscapeMode() ? Forge.getScreenHeight() / 64 : Forge.getScreenWidth() / 64;
int val = MyRandom.getRandom().nextInt(max - min) + min;
g.drawPixelatedWarp(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), val * percentage);
}
}
} else if (isIntro) {
if (textureRegion != null) {
if (Forge.advStartup) {