diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2014-09-11 17:25:21 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2014-09-11 17:25:21 +0200 |
commit | 315120c2eb21ebe415da10d7bc16ea513033a79a (patch) | |
tree | 05649c248628d7b2a40e14ad9281fcf14593cfe4 /core/src/ch/asynk/tankontank/screens | |
parent | 914d41346ad0167dd497d05ff0dbac7726d00537 (diff) | |
download | RustAndDust-315120c2eb21ebe415da10d7bc16ea513033a79a.zip RustAndDust-315120c2eb21ebe415da10d7bc16ea513033a79a.tar.gz |
add screens/LoadScreen + actors/LoadingBar + assets
Diffstat (limited to 'core/src/ch/asynk/tankontank/screens')
-rw-r--r-- | core/src/ch/asynk/tankontank/screens/LoadScreen.java | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/screens/LoadScreen.java b/core/src/ch/asynk/tankontank/screens/LoadScreen.java new file mode 100644 index 0000000..1ac8959 --- /dev/null +++ b/core/src/ch/asynk/tankontank/screens/LoadScreen.java @@ -0,0 +1,153 @@ +package ch.asynk.tankontank.screens; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Screen; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.Animation; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.math.Interpolation; +import com.badlogic.gdx.scenes.scene2d.Actor; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.utils.viewport.FitViewport; + +import ch.asynk.tankontank.TankOnTank; +import ch.asynk.tankontank.actors.LoadingBar; + +public class LoadScreen extends AbstractScreen +{ + private Stage stage; + + private Image logo; + private Image loadingFrame; + private Image loadingBarHidden; + private Image screenBg; + private Image loadingBg; + + private final int loadingBgWidth = 450; + private float startX, endX; + private float percent; + + private Actor loadingBar; + + private float delay = 0.0f; + + public LoadScreen(final TankOnTank game) + { + super(game); + } + + @Override + public void render(float delta) + { + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + if (game.manager.update()) { + if (delay < 1.0f) { + delay += delta; + if (delay >= 1.0f) { + Gdx.app.debug("LoadScreen", "assets loaded : " + (Gdx.app.getJavaHeap()/1024.0f) + "KB"); + // game.setScreen(new GameScreen(game)); + // dispose(); + } + } + } + + percent = Interpolation.linear.apply(percent, game.manager.getProgress(), 0.1f); + + loadingBarHidden.setX(startX + endX * percent); + loadingBg.setX(loadingBarHidden.getX() + 30); + loadingBg.setWidth(loadingBgWidth - loadingBgWidth * percent); + loadingBg.invalidate(); + + stage.act(); + stage.draw(); + } + + @Override + public void show() + { + Gdx.app.debug("LoadScreen", "show()"); + game.manager.load("loading.pack", TextureAtlas.class); + game.manager.finishLoading(); + + stage = new Stage(new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight())); + + TextureAtlas atlas = game.manager.get("loading.pack", TextureAtlas.class); + + // logo = new Image(atlas.findRegion("libgdx-logo")); + logo = new Image(atlas.findRegion("tank-logo")); + loadingFrame = new Image(atlas.findRegion("loading-frame")); + loadingBarHidden = new Image(atlas.findRegion("loading-bar-hidden")); + screenBg = new Image(atlas.findRegion("screen-bg")); + loadingBg = new Image(atlas.findRegion("loading-frame-bg")); + + Animation anim = new Animation(0.05f, atlas.findRegions("loading-bar-anim") ); + anim.setPlayMode(Animation.PlayMode.LOOP_REVERSED); + loadingBar = new LoadingBar(anim); + // loadingBar = new Image(atlas.findRegion("loading-bar1")); + + stage.addActor(screenBg); + stage.addActor(logo); + stage.addActor(loadingBar); + stage.addActor(loadingBg); + stage.addActor(loadingBarHidden); + stage.addActor(loadingFrame); + + game.loadAssets(); + } + + @Override + public void resize(int width, int height) + { + Gdx.app.debug("LoadScreen", "resize (" + width + "," + height + ")"); + + stage.getViewport().update(width, height, true); + + screenBg.setSize(stage.getWidth(), stage.getHeight()); + + logo.setX((stage.getWidth() - logo.getWidth()) / 2); + logo.setY((stage.getHeight() - logo.getHeight()) - 50); + + loadingFrame.setX((stage.getWidth() - loadingFrame.getWidth()) / 2); + loadingFrame.setY(logo.getY() - loadingFrame.getHeight() - 20); + + loadingBar.setX(loadingFrame.getX() + 15); + loadingBar.setY(loadingFrame.getY() + 5); + + loadingBarHidden.setX(loadingBar.getX() + 35); + loadingBarHidden.setY(loadingBar.getY() - 3); + startX = loadingBarHidden.getX(); + endX = loadingBgWidth - 10; + + loadingBg.setSize(loadingBgWidth, 50); + loadingBg.setX(loadingBarHidden.getX() + 30); + loadingBg.setY(loadingBarHidden.getY() + 3); + } + + @Override + public void dispose() + { + Gdx.app.debug("LoadScreen", "dispose()"); + stage.dispose(); + } + + @Override + public void hide() + { + Gdx.app.debug("LoadScreen", "hide()"); + game.manager.unload("loading.pack"); + } + + @Override + public void pause() + { + Gdx.app.debug("LoadScreen", "pause()"); + } + + @Override + public void resume() + { + Gdx.app.debug("LoadScreen", "resume()"); + } +} |