/*
* ******************************************************************************
* * Copyright 2015 See AUTHORS file.
* *
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
* *****************************************************************************
*/
package com.uwsoft.editor.splash;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.NinePatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
/**
* Created by azakhary on 5/15/2015.
*/
public class SplashScreen extends ApplicationAdapter {
private Stage stage;
private TextureAtlas atlas;
private Image progressBarBg;
private Image progressBar;
private Label progress;
private Label percent;
public interface SplashListener {
public void loadingComplete();
}
public SplashListener listener;
@Override
public void create () {
atlas = new TextureAtlas(Gdx.files.internal("splash/splash.atlas"));
stage = new Stage();
NinePatch backgroundPatch = getNinePatch(atlas.findRegion("background"));
Image background = new Image(backgroundPatch);
background.setWidth(stage.getWidth() + 2);
background.setX(-1);
background.setY(-1);
stage.addActor(background);
Image graphic = new Image(atlas.findRegion("graphic"));
graphic.setX(stage.getWidth() / 2 - graphic.getWidth() / 2);
graphic.setY(stage.getHeight() - graphic.getHeight() - 37);
stage.addActor(graphic);
Image logo = new Image(atlas.findRegion("logo"));
logo.setX(stage.getWidth() / 2 - logo.getWidth() / 2);
logo.setY(graphic.getY() - logo.getHeight()-3);
stage.addActor(logo);
progressBarBg = new Image(getNinePatch(atlas.findRegion("progressBg")));
progressBar = new Image(getNinePatch(atlas.findRegion("progressBar")));
progressBarBg.setWidth(stage.getWidth()-24);
progressBarBg.setX(stage.getWidth() / 2 - progressBarBg.getWidth() / 2);
progressBarBg.setY(89);
progressBar.setWidth(6);
progressBar.setX(progressBarBg.getX());
progressBar.setY(progressBarBg.getY());
stage.addActor(progressBarBg);
stage.addActor(progressBar);
Image separator = new Image(atlas.findRegion("devider"));
separator.setScaleX(stage.getWidth()-24);
separator.setX(stage.getWidth() / 2 - separator.getScaleX() / 2);
separator.setY(61);
stage.addActor(separator);
BitmapFont robotFont = new BitmapFont(Gdx.files.internal("splash/roboto.fnt"));
Label.LabelStyle labelStyle = new Label.LabelStyle(robotFont, new Color(224f/255f, 224f/255f, 224f/255f, 1f));
Label companyName = new Label("Underwater Apps LLC", labelStyle);
companyName.setX(13);
companyName.setY(separator.getY() - companyName.getHeight() - 7);
stage.addActor(companyName);
Label copyright = new Label("Copyright (c) 2015. All rights reserved.", labelStyle);
copyright.setX(13);
copyright.setY(companyName.getY() - 20);
stage.addActor(copyright);
Label version = new Label("v 0.0.9", labelStyle);
version.setX(stage.getWidth() - 13 - version.getWidth());
version.setY(companyName.getY());
stage.addActor(version);
progress = new Label("Loading fonts", labelStyle);
progress.setX(stage.getWidth()/2 - progress.getWidth()/2);
progress.setY(progressBar.getY() + 11);
stage.addActor(progress);
percent = new Label("55%", labelStyle);
percent.setX(stage.getWidth() - 13 - percent.getWidth());
percent.setY(progressBar.getY() + 11);
stage.addActor(percent);
Image logoLbl = new Image(atlas.findRegion("logoText"));
logoLbl.setX(stage.getWidth()/2 - logoLbl.getWidth()/2);
logoLbl.setY(stage.getHeight()-24);
stage.addActor(logoLbl);
setProgress(0);
setProgressStatus("Initializing");
loadData();
}
private void loadData() {
//TODO: do some server connecting here to check for new versions.
if(listener != null) {
setProgress(100);
stage.addAction(Actions.sequence(Actions.delay(0.3f), Actions.run(() -> listener.loadingComplete())));
}
}
public void setProgressStatus(String status) {
progress.setText(status);
progress.setX(stage.getWidth()/2 - progress.getWidth()/2);
}
public void setProgress(float percentNum) {
percent.setText((int)percentNum + "%");
percent.setX(stage.getWidth() - 13 - percent.getWidth());
float newWidth = (percentNum/100f) * progressBarBg.getWidth();
if(newWidth < 6) newWidth = 6;
progressBar.clearActions();
progressBar.addAction(Actions.sizeTo(newWidth, progressBar.getHeight(), 0.2f));
}
private NinePatch getNinePatch(TextureAtlas.AtlasRegion region) {
return new NinePatch(region, region.splits[0], region.splits[1], region.splits[2], region.splits[3]);
}
@Override
public void render () {
stage.act();
stage.draw();
}
}