diff options
Diffstat (limited to 'core/src/ch/asynk')
| -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()"); +    } +} | 
