animated startup

This commit is contained in:
Anthony Calosa
2022-02-11 08:48:29 +08:00
parent f4987c0ba6
commit a9956f8cfd

View File

@@ -1,11 +1,13 @@
package forge.screens; package forge.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.animation.ForgeAnimation;
import forge.assets.FSkin; import forge.assets.FSkin;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
@@ -20,12 +22,14 @@ public class SplashScreen extends FContainer {
private TextureRegion background; private TextureRegion background;
private final FProgressBar progressBar; private final FProgressBar progressBar;
private FSkinFont disclaimerFont; private FSkinFont disclaimerFont;
private boolean preparedForDialogs, showModeSelector, init; private boolean preparedForDialogs, showModeSelector, init, nobg;
private FButton btnAdventure, btnHome; private FButton btnAdventure, btnHome;
private BGAnimation bgAnimation;
public SplashScreen() { public SplashScreen() {
progressBar = new FProgressBar(); progressBar = new FProgressBar();
progressBar.setDescription("Welcome to Forge"); progressBar.setDescription("Welcome to Forge");
bgAnimation = new BGAnimation();
} }
public FProgressBar getProgressBar() { public FProgressBar getProgressBar() {
@@ -72,13 +76,59 @@ public class SplashScreen extends FContainer {
showModeSelector = value; showModeSelector = value;
} }
private class BGAnimation extends ForgeAnimation {
private static final float DURATION = 0.8f;
private float progress = 0;
private boolean finished, openAdventure;
public void drawBackground(Graphics g) {
float percentage = progress / DURATION;
if (percentage < 0) {
percentage = 0;
} else if (percentage > 1) {
percentage = 1;
}
if (nobg) {
float scale = 1.3f+(percentage*0.7f);
float hscale = 1.5f+(percentage*0.9f);
float logoHeight = FSkin.hdLogo.getHeight()*scale;
float logoWidth = FSkin.hdLogo.getWidth()*scale;
float logoY = getHeight()/2 - logoHeight/hscale;
float logoX = getWidth()/2 - logoWidth/2;
float mod = getHeight()/2 - logoHeight/2;
float oldalpha = g.getfloatAlphaComposite();
g.setAlphaComposite(oldalpha-percentage);
g.drawImage(FSkin.hdLogo, logoX, logoY+(mod*percentage), logoWidth, logoHeight);
g.setAlphaComposite(oldalpha);
} else if (showModeSelector)
showSelector(g);
else
showSplash(g);
}
@Override
protected boolean advance(float dt) {
progress += dt;
return progress < DURATION;
}
@Override
protected void onEnd(boolean endingAll) {
if (nobg) {
if (openAdventure)
Forge.openAdventure();
else
Forge.openHomeDefault();
}
}
}
@Override @Override
protected void drawBackground(Graphics g) { protected void drawBackground(Graphics g) {
if (showModeSelector) bgAnimation.start();
showSelector(g); bgAnimation.drawBackground(g);
else
showSplash(g);
} }
private void showSelector(Graphics g) { private void showSelector(Graphics g) {
g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight()); g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight());
@@ -97,14 +147,11 @@ public class SplashScreen extends FContainer {
w = getHeight() / backgroundRatio; w = getHeight() / backgroundRatio;
x = (getWidth() - w) / 2; x = (getWidth() - w) / 2;
} }
float oldalpha = g.getfloatAlphaComposite();
g.setAlphaComposite(0.5f);
if (FSkin.hdLogo != null) { if (FSkin.hdLogo != null) {
g.drawImage(FSkin.hdLogo, getWidth()/2 - (FSkin.hdLogo.getWidth()*1.3f)/2, getHeight()/2 - (FSkin.hdLogo.getHeight()*1.3f)/1.5f, FSkin.hdLogo.getWidth()*1.3f, FSkin.hdLogo.getHeight()*1.3f); g.drawImage(FSkin.hdLogo, getWidth()/2 - (FSkin.hdLogo.getWidth()*1.3f)/2, getHeight()/2 - (FSkin.hdLogo.getHeight()*1.3f)/1.5f, FSkin.hdLogo.getWidth()*1.3f, FSkin.hdLogo.getHeight()*1.3f);
} else { } else {
g.drawImage(background, x, y, w, h); g.drawImage(background, x, y, w, h);
} }
g.setAlphaComposite(oldalpha);
y += h * 295f / 450f; y += h * 295f / 450f;
float padding = 20f / 450f * w; float padding = 20f / 450f * w;
float height = 57f / 450f * h; float height = 57f / 450f * h;
@@ -115,13 +162,29 @@ public class SplashScreen extends FContainer {
btnAdventure.setCommand(new FEvent.FEventHandler() { btnAdventure.setCommand(new FEvent.FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
Forge.openAdventure(); if (FSkin.hdLogo == null)
Forge.openAdventure();
else {
btnAdventure.setVisible(false);
btnHome.setVisible(false);
nobg = true;
bgAnimation.progress = 0;
bgAnimation.openAdventure = true;
}
} }
}); });
btnHome.setCommand(new FEvent.FEventHandler() { btnHome.setCommand(new FEvent.FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
Forge.openHomeDefault(); if (FSkin.hdLogo == null)
Forge.openHomeDefault();
else {
btnAdventure.setVisible(false);
btnHome.setVisible(false);
nobg = true;
bgAnimation.progress = 0;
bgAnimation.openAdventure = false;
}
} }
}); });
float btn_w = (w - 2 * padding); float btn_w = (w - 2 * padding);