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 forge.util.*;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class Forge implements ApplicationListener {
|
public class Forge implements ApplicationListener {
|
||||||
@@ -174,6 +176,7 @@ public class Forge implements ApplicationListener {
|
|||||||
Gdx.input.setCatchKey(Keys.BACK, true);
|
Gdx.input.setCatchKey(Keys.BACK, true);
|
||||||
destroyThis = true; //Prevent back()
|
destroyThis = true; //Prevent back()
|
||||||
ForgePreferences prefs = new ForgePreferences();
|
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);
|
selector = prefs.getPref(FPref.UI_SELECTOR_MODE);
|
||||||
String skinName;
|
String skinName;
|
||||||
if (FileUtil.doesFileExist(ForgeConstants.MAIN_PREFS_FILE)) {
|
if (FileUtil.doesFileExist(ForgeConstants.MAIN_PREFS_FILE)) {
|
||||||
@@ -323,6 +326,7 @@ public class Forge implements ApplicationListener {
|
|||||||
//continuous rendering is needed for adventure mode
|
//continuous rendering is needed for adventure mode
|
||||||
startContinuousRendering();
|
startContinuousRendering();
|
||||||
GuiBase.setIsAdventureMode(true);
|
GuiBase.setIsAdventureMode(true);
|
||||||
|
advStartup = false;
|
||||||
isMobileAdventureMode = true;
|
isMobileAdventureMode = true;
|
||||||
if (GuiBase.isAndroid()) //force it for adventure mode
|
if (GuiBase.isAndroid()) //force it for adventure mode
|
||||||
altZoneTabs = true;
|
altZoneTabs = true;
|
||||||
@@ -764,8 +768,20 @@ public class Forge implements ApplicationListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void clearTransitionScreen() {
|
public static void clearTransitionScreen() {
|
||||||
|
clearTransitionScreen(false);
|
||||||
|
}
|
||||||
|
public static void clearTransitionScreen(boolean disableMatchTransition) {
|
||||||
|
if (transitionScreen != null) {
|
||||||
|
if (disableMatchTransition) {
|
||||||
|
transitionScreen.disableMatchTransition();
|
||||||
transitionScreen = null;
|
transitionScreen = null;
|
||||||
}
|
}
|
||||||
|
if (!disableMatchTransition && transitionScreen.isMatchTransition()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
transitionScreen = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void clearSplashScreen() {
|
public static void clearSplashScreen() {
|
||||||
splashScreen = null;
|
splashScreen = null;
|
||||||
@@ -1012,6 +1028,8 @@ public class Forge implements ApplicationListener {
|
|||||||
currentScene = newScene;
|
currentScene = newScene;
|
||||||
|
|
||||||
currentScene.enter();
|
currentScene.enter();
|
||||||
|
if (currentScene instanceof DuelScene)
|
||||||
|
Forge.clearTransitionScreen(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ public class Graphics {
|
|||||||
private final ShaderProgram shaderNightDay = new ShaderProgram(Shaders.vertexShaderDayNight, Shaders.fragmentShaderDayNight);
|
private final ShaderProgram shaderNightDay = new ShaderProgram(Shaders.vertexShaderDayNight, Shaders.fragmentShaderDayNight);
|
||||||
private final ShaderProgram shaderPixelate = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragPixelateShader);
|
private final ShaderProgram shaderPixelate = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragPixelateShader);
|
||||||
private final ShaderProgram shaderPixelateWarp = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragPixelateShaderWarp);
|
private final ShaderProgram shaderPixelateWarp = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragPixelateShaderWarp);
|
||||||
|
private final ShaderProgram shaderChromaticAbberation = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragChromaticAbberation);
|
||||||
|
|
||||||
private Texture dummyTexture = null;
|
private Texture dummyTexture = null;
|
||||||
|
|
||||||
@@ -821,6 +822,25 @@ public class Graphics {
|
|||||||
setAlphaComposite(oldalpha);
|
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) {
|
public void drawPixelated(FImage image, float x, float y, float w, float h, Float amount) {
|
||||||
if (image == null)
|
if (image == null)
|
||||||
return;
|
return;
|
||||||
@@ -868,10 +888,10 @@ public class Graphics {
|
|||||||
batch.end();
|
batch.end();
|
||||||
shaderPixelateWarp.bind();
|
shaderPixelateWarp.bind();
|
||||||
shaderPixelateWarp.setUniformf("u_resolution", image.getRegionWidth(), image.getRegionHeight());
|
shaderPixelateWarp.setUniformf("u_resolution", image.getRegionWidth(), image.getRegionHeight());
|
||||||
shaderPixelateWarp.setUniformf("u_cellSize", amount*6);
|
shaderPixelateWarp.setUniformf("u_cellSize", amount);
|
||||||
shaderPixelateWarp.setUniformf("u_amount", 0.2f);
|
shaderPixelateWarp.setUniformf("u_amount", 0.2f*amount);
|
||||||
shaderPixelateWarp.setUniformf("u_speed", 0.5f);
|
shaderPixelateWarp.setUniformf("u_speed", 0.5f);
|
||||||
shaderPixelateWarp.setUniformf("u_time", amount);
|
shaderPixelateWarp.setUniformf("u_time", 0.8f);
|
||||||
batch.setShader(shaderPixelateWarp);
|
batch.setShader(shaderPixelateWarp);
|
||||||
batch.begin();
|
batch.begin();
|
||||||
//draw
|
//draw
|
||||||
|
|||||||
@@ -42,6 +42,34 @@ public class Shaders {
|
|||||||
" v_texCoords = a_texCoord0;\n" +
|
" v_texCoords = a_texCoord0;\n" +
|
||||||
" gl_Position = u_projTrans * a_position;\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" +
|
public static final String fragPixelateShader = "#ifdef GL_ES\n" +
|
||||||
"#define PRECISION mediump\n" +
|
"#define PRECISION mediump\n" +
|
||||||
"precision PRECISION float;\n" +
|
"precision PRECISION float;\n" +
|
||||||
|
|||||||
@@ -210,7 +210,6 @@ public class ArenaScene extends UIScene implements IAfterMatch {
|
|||||||
FThreads.invokeInEdtNowOrLater(() -> {
|
FThreads.invokeInEdtNowOrLater(() -> {
|
||||||
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
||||||
duelScene.initDuels(WorldStage.getInstance().getPlayerSprite(), enemies.get(enemies.size-1));
|
duelScene.initDuels(WorldStage.getInstance().getPlayerSprite(), enemies.get(enemies.size-1));
|
||||||
Forge.clearTransitionScreen();
|
|
||||||
Forge.switchScene(DuelScene.instance());
|
Forge.switchScene(DuelScene.instance());
|
||||||
}, Forge.takeScreenshot(), true, false));
|
}, Forge.takeScreenshot(), true, false));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class GameScene extends HudScene {
|
|||||||
location = forHeader? TextUtil.capitalize(data.name)+" Map" : data.name;
|
location = forHeader? TextUtil.capitalize(data.name)+" Map" : data.name;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
location = "";
|
location = forHeader ? "Waste Map" : "waste";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return location;
|
return location;
|
||||||
|
|||||||
@@ -693,11 +693,9 @@ public class MapStage extends GameStage {
|
|||||||
isLoadingMatch = true;
|
isLoadingMatch = true;
|
||||||
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
||||||
duelScene.initDuels(player, mob);
|
duelScene.initDuels(player, mob);
|
||||||
Forge.clearTransitionScreen();
|
if (isInMap && effect != null)
|
||||||
startPause(0.3f, () -> {
|
duelScene.setDungeonEffect(effect);
|
||||||
if (isInMap && effect != null) duelScene.setDungeonEffect(effect);
|
|
||||||
Forge.switchScene(DuelScene.instance());
|
Forge.switchScene(DuelScene.instance());
|
||||||
});
|
|
||||||
}, Forge.takeScreenshot(), true, false));
|
}, Forge.takeScreenshot(), true, false));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -129,8 +129,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
|
|||||||
FThreads.invokeInEdtNowOrLater(() -> {
|
FThreads.invokeInEdtNowOrLater(() -> {
|
||||||
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
||||||
duelScene.initDuels(player, mob);
|
duelScene.initDuels(player, mob);
|
||||||
Forge.clearTransitionScreen();
|
Forge.switchScene(DuelScene.instance());
|
||||||
startPause(0.3f, () -> Forge.switchScene(DuelScene.instance()));
|
|
||||||
}, Forge.takeScreenshot(), true, false));
|
}, Forge.takeScreenshot(), true, false));
|
||||||
currentMob = mob;
|
currentMob = mob;
|
||||||
WorldSave.getCurrentSave().autoSave();
|
WorldSave.getCurrentSave().autoSave();
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ public class SplashScreen extends FContainer {
|
|||||||
|
|
||||||
String version = "v. " + Forge.CURRENT_VERSION;
|
String version = "v. " + Forge.CURRENT_VERSION;
|
||||||
g.drawText(version, disclaimerFont, FProgressBar.SEL_FORE_COLOR, x, getHeight() - disclaimerHeight, w, disclaimerHeight, false, Align.center, true);
|
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);
|
g.draw(progressBar);
|
||||||
}
|
}
|
||||||
public void drawBackground(Graphics g) {
|
public void drawBackground(Graphics g) {
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ import forge.assets.FSkin;
|
|||||||
import forge.assets.FSkinImage;
|
import forge.assets.FSkinImage;
|
||||||
import forge.assets.FSkinTexture;
|
import forge.assets.FSkinTexture;
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
|
import forge.gui.GuiBase;
|
||||||
import forge.sound.SoundSystem;
|
import forge.sound.SoundSystem;
|
||||||
import forge.toolbox.FContainer;
|
import forge.toolbox.FContainer;
|
||||||
import forge.toolbox.FProgressBar;
|
import forge.toolbox.FProgressBar;
|
||||||
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
public class TransitionScreen extends FContainer {
|
public class TransitionScreen extends FContainer {
|
||||||
private BGAnimation bgAnimation;
|
private BGAnimation bgAnimation;
|
||||||
@@ -43,7 +45,7 @@ public class TransitionScreen extends FContainer {
|
|||||||
isIntro = intro;
|
isIntro = intro;
|
||||||
isFadeMusic = fadeMusic;
|
isFadeMusic = fadeMusic;
|
||||||
message = loadingMessage;
|
message = loadingMessage;
|
||||||
Forge.advStartup = Forge.selector.equals("Adventure");
|
Forge.advStartup = intro && Forge.selector.equals("Adventure");
|
||||||
}
|
}
|
||||||
|
|
||||||
public FProgressBar getProgressBar() {
|
public FProgressBar getProgressBar() {
|
||||||
@@ -53,6 +55,12 @@ public class TransitionScreen extends FContainer {
|
|||||||
protected void doLayout(float width, float height) {
|
protected void doLayout(float width, float height) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
public boolean isMatchTransition() {
|
||||||
|
return matchTransition;
|
||||||
|
}
|
||||||
|
public void disableMatchTransition() {
|
||||||
|
matchTransition = false;
|
||||||
|
}
|
||||||
|
|
||||||
private class BGAnimation extends ForgeAnimation {
|
private class BGAnimation extends ForgeAnimation {
|
||||||
float DURATION = 0.6f;
|
float DURATION = 0.6f;
|
||||||
@@ -107,8 +115,16 @@ public class TransitionScreen extends FContainer {
|
|||||||
g.draw(progressBar);
|
g.draw(progressBar);
|
||||||
}
|
}
|
||||||
} else if (matchTransition) {
|
} else if (matchTransition) {
|
||||||
if (textureRegion != null)
|
if (textureRegion != null) {
|
||||||
g.drawPixelatedWarp(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), 2.6f-(1*percentage));
|
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) {
|
} else if (isIntro) {
|
||||||
if (textureRegion != null) {
|
if (textureRegion != null) {
|
||||||
if (Forge.advStartup) {
|
if (Forge.advStartup) {
|
||||||
|
|||||||
Reference in New Issue
Block a user