package sx.lambda.voxel.client.gui.transition; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.FrameBuffer; import sx.lambda.voxel.RadixClient; import sx.lambda.voxel.client.gui.GuiScreen; import static com.badlogic.gdx.graphics.GL20.*; /** * Transition animation that slides the current screen up */ public class SlideUpAnimation extends TimedTransitionAnimation { private final GuiScreen currentScreen; private FrameBuffer fbo; private Texture fboTex; private OrthographicCamera cam; /** * @param currentScreen The currently shown screen * @param length Time in milliseconds to run the animation for */ public SlideUpAnimation(GuiScreen currentScreen, int length) { super(length); this.currentScreen = currentScreen; } @Override public void init() { super.init(); fbo = new FrameBuffer(Pixmap.Format.RGBA4444, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); fboTex = fbo.getColorBufferTexture(); Gdx.gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Gdx.gl.glEnable(GL_BLEND); SpriteBatch batch = new SpriteBatch(); batch.setProjectionMatrix(RadixClient.getInstance().getHudCamera().combined); fbo.bind(); batch.begin(); currentScreen.render(false, batch); batch.end(); FrameBuffer.unbind(); } @Override public void render(SpriteBatch guiBatch) { float percentageDone = (float) getTimeSinceStart() / (float) getLength(); guiBatch.draw(fboTex, 0, Gdx.graphics.getHeight() + Gdx.graphics.getHeight()*percentageDone, Gdx.graphics.getWidth(), -Gdx.graphics.getHeight()); } @Override public void finish() { fbo.dispose(); fboTex.dispose(); } }