diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/src/ch/asynk/tankontank/TankOnTank.java | 2 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/actors/LoadingBar.java | 32 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/screens/LoadScreen.java | 153 |
3 files changed, 186 insertions, 1 deletions
diff --git a/core/src/ch/asynk/tankontank/TankOnTank.java b/core/src/ch/asynk/tankontank/TankOnTank.java index 90a3068..18f2e16 100644 --- a/core/src/ch/asynk/tankontank/TankOnTank.java +++ b/core/src/ch/asynk/tankontank/TankOnTank.java @@ -19,7 +19,7 @@ public class TankOnTank extends Game manager = new AssetManager(); - // this.setScreen(new LoadScreen(this)); + this.setScreen(new LoadScreen(this)); } public void loadAssets() diff --git a/core/src/ch/asynk/tankontank/actors/LoadingBar.java b/core/src/ch/asynk/tankontank/actors/LoadingBar.java new file mode 100644 index 0000000..c8b138f --- /dev/null +++ b/core/src/ch/asynk/tankontank/actors/LoadingBar.java @@ -0,0 +1,32 @@ +package ch.asynk.tankontank.actors; + +import com.badlogic.gdx.graphics.g2d.Animation; +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.scenes.scene2d.Actor; + +public class LoadingBar extends Actor +{ + Animation animation; + TextureRegion reg; + float stateTime; + + public LoadingBar(Animation animation) + { + this.animation = animation; + reg = animation.getKeyFrame(0); + } + + @Override + public void act(float delta) + { + stateTime += delta; + reg = animation.getKeyFrame(stateTime); + } + + @Override + public void draw(Batch batch, float parentAlpha) + { + batch.draw(reg, getX(), getY()); + } +} 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()"); + } +} |