mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Merge pull request #2022 from kevlahnota/newmaster2
update LoadingOverlay
This commit is contained in:
@@ -52,6 +52,7 @@ public class Graphics {
|
||||
private final ShaderProgram shaderHueShift = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragHueShift);
|
||||
private final ShaderProgram shaderRoundedRect = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragRoundedRect);
|
||||
private final ShaderProgram shaderNoiseFade = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragNoiseFade);
|
||||
private final ShaderProgram shaderPortal = new ShaderProgram(Shaders.vertPixelateShader, Shaders.fragPortal);
|
||||
|
||||
private Texture dummyTexture = null;
|
||||
|
||||
@@ -944,6 +945,28 @@ public class Graphics {
|
||||
}
|
||||
}
|
||||
|
||||
public void drawPortalFade(TextureRegion image, float x, float y, float w, float h, Float time, boolean opaque) {
|
||||
if (image == null)
|
||||
return;
|
||||
if (time != null) {
|
||||
batch.end();
|
||||
shaderPortal.bind();
|
||||
shaderPortal.setUniformf("u_resolution", image.getRegionWidth(), image.getRegionHeight());
|
||||
shaderPortal.setUniformf("u_time", time);
|
||||
shaderPortal.setUniformf("u_opaque", opaque ? 1f : 0f);
|
||||
batch.setShader(shaderPortal);
|
||||
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 drawHueShift(Texture image, float x, float y, float w, float h, Float time) {
|
||||
if (image == null)
|
||||
return;
|
||||
|
||||
@@ -42,6 +42,52 @@ public class Shaders {
|
||||
" v_texCoords = a_texCoord0;\n" +
|
||||
" gl_Position = u_projTrans * a_position;\n" +
|
||||
"}";
|
||||
public static final String fragPortal="#ifdef GL_ES\n" +
|
||||
"#define LOWP lowp\n" +
|
||||
"#define PI 3.14159\n" +
|
||||
"precision mediump float;\n" +
|
||||
"#else\n" +
|
||||
"#define LOWP \n" +
|
||||
"#define PI 3.14159\n" +
|
||||
"#endif\n" +
|
||||
"\n" +
|
||||
"uniform sampler2D u_texture;\n" +
|
||||
"varying vec2 v_texCoords;\n" +
|
||||
"uniform vec2 u_resolution;\n" +
|
||||
"uniform float u_time;\n" +
|
||||
"uniform float u_opaque;\n" +
|
||||
"\n" +
|
||||
"void main()\n" +
|
||||
"{\n" +
|
||||
" vec2 uv = v_texCoords;\n" +
|
||||
" \n" +
|
||||
" float t1 = u_time;\n" +
|
||||
" if (t1>1.25)\n" +
|
||||
" t1=0.0;\n" +
|
||||
" t1 = clamp(t1,0.0,1.0);\n" +
|
||||
" float nt = fract(t1);\n" +
|
||||
"\n" +
|
||||
" float eRad = 1.5 * nt;\n" +
|
||||
" float eAng = (2. * PI) * (nt*4.5);\n" +
|
||||
"\n" +
|
||||
" vec2 centre = vec2(.5,.5);\n" +
|
||||
" uv -= centre;\n" +
|
||||
" float len = length(uv * vec2(u_resolution.x / u_resolution.y, 1.));\n" +
|
||||
" float ang = atan(uv.y, uv.x) + eAng * smoothstep(eRad, 0., len);\n" +
|
||||
" float rad = length(uv);\n" +
|
||||
" \n" +
|
||||
" vec3 col1 = texture2D(u_texture, vec2(rad * cos(ang), rad * sin(ang)) + centre ).xyz; \n" +
|
||||
" float nt2 = (len*2.0) - (nt*2.0);\n" +
|
||||
" nt2 = mix(1.0,nt2-nt,nt);\n" +
|
||||
" nt2 = clamp(nt2,0.0,1.0);\n" +
|
||||
" \tvec3 col2 = texture2D(u_texture,uv+ centre).xyz; \n" +
|
||||
" col2 = vec3(0.0);\n" +
|
||||
" \n" +
|
||||
" vec4 col3 = vec4(mix(col2,col1,nt2), 1.);\n" +
|
||||
" if (u_opaque < 1.)" +
|
||||
" col3.a *= nt2;\n" +
|
||||
" gl_FragColor = col3;\n" +
|
||||
"}";
|
||||
public static final String fragNoiseFade="#ifdef GL_ES\n" +
|
||||
"#define LOWP lowp\n" +
|
||||
"precision mediump float;\n" +
|
||||
|
||||
@@ -119,16 +119,16 @@ public class DuelScene extends ForgeScene {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
if (result == 0) {
|
||||
afterGameEnd(enemyName, finalWinner, true);
|
||||
afterGameEnd(enemyName, finalWinner, true, true);
|
||||
}
|
||||
}
|
||||
}));
|
||||
} else {
|
||||
afterGameEnd(enemyName, winner, false);
|
||||
afterGameEnd(enemyName, winner, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
void afterGameEnd(String enemyName, boolean winner, boolean showOverlay) {
|
||||
void afterGameEnd(String enemyName, boolean winner, boolean showOverlay, boolean alternate) {
|
||||
Runnable runnable = () -> Gdx.app.postRunnable(()-> {
|
||||
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music
|
||||
dungeonEffect = null;
|
||||
@@ -144,7 +144,7 @@ public class DuelScene extends ForgeScene {
|
||||
});
|
||||
if (showOverlay) {
|
||||
FThreads.invokeInEdtNowOrLater(() -> {
|
||||
matchOverlay = new LoadingOverlay(runnable, true);
|
||||
matchOverlay = new LoadingOverlay(runnable, true, alternate);
|
||||
matchOverlay.show();
|
||||
});
|
||||
} else {
|
||||
@@ -335,7 +335,7 @@ public class DuelScene extends ForgeScene {
|
||||
if (FSkin.getAvatars().get(90001) != null)
|
||||
g.drawImage(FSkin.getAvatars().get(90001), 0, 0, w, h);
|
||||
}
|
||||
}))), false);
|
||||
}))), false, true);
|
||||
} else {
|
||||
matchOverlay = new LoadingOverlay(null);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public class LoadingOverlay extends FOverlay {
|
||||
private static final FSkinFont FONT = FSkinFont.get(22);
|
||||
private BGAnimation bgAnimation;
|
||||
private Runnable runnable;
|
||||
private boolean afterMatch;
|
||||
private boolean afterMatch, alternate;
|
||||
|
||||
private static FSkinColor getOverlayColor() {
|
||||
if (Forge.isMobileAdventureMode)
|
||||
@@ -70,17 +70,18 @@ public class LoadingOverlay extends FOverlay {
|
||||
textMode = textOnly;
|
||||
}
|
||||
|
||||
public LoadingOverlay(Runnable toRunBeforeMatch) {
|
||||
this(toRunBeforeMatch, false);
|
||||
public LoadingOverlay(Runnable runnable) {
|
||||
this(runnable, false, false);
|
||||
}
|
||||
public LoadingOverlay(Runnable toRunBeforeMatch, boolean aftermatch) {
|
||||
public LoadingOverlay(Runnable toRun, boolean aftermatch, boolean otherTransition) {
|
||||
caption = "";
|
||||
textMode = true;
|
||||
textureRegion = Forge.takeScreenshot();
|
||||
match = true;
|
||||
bgAnimation = new BGAnimation();
|
||||
runnable = toRunBeforeMatch;
|
||||
runnable = toRun;
|
||||
afterMatch = aftermatch;
|
||||
alternate = otherTransition;
|
||||
}
|
||||
|
||||
public void setCaption(String caption0) {
|
||||
@@ -148,7 +149,7 @@ public class LoadingOverlay extends FOverlay {
|
||||
}
|
||||
|
||||
private class BGAnimation extends ForgeAnimation {
|
||||
float DURATION = 1f;
|
||||
float DURATION = afterMatch ? 0.8f : 1.3f;
|
||||
private float progress = 0;
|
||||
|
||||
public void drawBackground(Graphics g) {
|
||||
@@ -162,7 +163,10 @@ public class LoadingOverlay extends FOverlay {
|
||||
if (afterMatch) {
|
||||
g.drawGrayTransitionImage(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), false, percentage);
|
||||
} else {
|
||||
g.drawNoiseFade(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage);
|
||||
if (alternate)
|
||||
g.drawPortalFade(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage > 0.8f ? 0.8f : percentage, afterMatch);
|
||||
else
|
||||
g.drawNoiseFade(textureRegion, 0, 0, Forge.getScreenWidth(), Forge.getScreenHeight(), percentage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user