mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 02:08:00 +00:00
Merge pull request #1970 from kevlahnota/newmaster2
update match transition
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" +
|
||||
|
||||
@@ -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));
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user