/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers.scenes;
import aurelienribon.tweenengine.Tween;
import aurelienribon.tweenengine.TweenEquations;
import com.badlogic.gdx.Application;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.ui.HeyZapCheckInButton;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.utils.Align;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Scaling;
import com.happydroids.droidtowers.DroidTowersGame;
import com.happydroids.droidtowers.TowerAssetManager;
import com.happydroids.droidtowers.entities.SplashCloudLayer;
import com.happydroids.droidtowers.gui.AudioControl;
import com.happydroids.droidtowers.gui.Sunburst;
import com.happydroids.droidtowers.gui.WidgetAccessor;
import com.happydroids.droidtowers.gui.controls.AnimatedHappyDroid;
import com.happydroids.droidtowers.platform.Display;
import com.happydroids.droidtowers.scenes.components.AssetLoadProgressPanel;
import com.happydroids.droidtowers.scenes.components.ProgressPanel;
import com.happydroids.droidtowers.tween.TweenSystem;
import com.happydroids.platform.Platform;
import static com.badlogic.gdx.graphics.Texture.TextureFilter.Linear;
import static com.badlogic.gdx.utils.Scaling.fit;
import static com.badlogic.gdx.utils.Scaling.stretchX;
import static com.happydroids.droidtowers.TowerAssetManager.isLoaded;
public abstract class SplashScene extends Scene {
public static final int CAMERA_PAN_DOWN_DURATION = 1000;
private Sprite happyDroid;
protected SplashCloudLayer cloudLayer;
private TextureAtlas atlas1;
private TextureAtlas atlas2;
protected Image droidTowersLogo;
protected ProgressPanel progressPanel;
private Image mainBuilding;
private boolean createdAudioControls;
private Group container;
private boolean createdSplashScene;
@Override
public void create(Object... args) {
makeSkyGradient();
if (Gdx.graphics.isGL20Available()) {
makeSunburst();
}
container = new Group();
addActor(container);
progressPanel = new AssetLoadProgressPanel();
center(progressPanel);
addActor(progressPanel);
}
private void makeSkyGradient() {
Texture skyGradient = new Texture("backgrounds/splash-skygradient.png");
skyGradient.setFilter(Linear, Linear);
Image skyImage = new Image(new TextureRegionDrawable(new TextureRegion(skyGradient)), Scaling.stretch);
skyImage.setWidth(getStage().getWidth() * 1.05f);
skyImage.setHeight(getStage().getHeight() * 1.05f);
skyImage.setX(-getStage().getWidth() * 0.025f);
skyImage.setY(-getStage().getHeight() * 0.025f);
addActor(skyImage);
}
private void makeSunburst() {
final Sunburst sunburst = new Sunburst(getStage());
Tween.to(sunburst, WidgetAccessor.ROTATION, 5000)
.target(8)
.repeatYoyo(Tween.INFINITY, 0)
.start(TweenSystem.manager());
addActor(sunburst);
}
private void makeCloudLayer() {
cloudLayer = new SplashCloudLayer(getStage(), atlas2.findRegions("cloud"));
container.addActor(cloudLayer);
}
private void makeCityScape() {
Group cityScape = new Group();
Image cityScapeLeft = new Image(new TextureRegionDrawable(atlas2.findRegion("cityscape-left")), fit, Align.bottom);
Image cityScapeRight = new Image(new TextureRegionDrawable(atlas2.findRegion("cityscape-right")), fit, Align.bottom);
Image cityScapeMiddle = new Image(TowerAssetManager.drawable("backgrounds/cityscape-middle.png"), stretchX, Align.bottom);
cityScapeLeft.setWidth((int) Math.min(getStage().getWidth() * 0.33f, cityScapeLeft.getImageWidth()));
cityScapeLeft.setHeight((int) Math.min(getStage().getHeight() * 0.33f, cityScapeLeft.getImageHeight()));
cityScapeLeft.pack();
cityScapeRight.setWidth((int) Math.min(getStage().getWidth() * 0.33f, cityScapeRight.getImageWidth()));
cityScapeRight.setHeight((int) Math.min(getStage().getHeight() * 0.33f, cityScapeRight.getImageHeight()));
cityScapeRight.pack();
cityScapeRight.setX(getStage().getWidth() - cityScapeRight.getWidth());
cityScapeMiddle.setWidth((int) getStage().getWidth() * 0.33f);
cityScapeMiddle.setHeight((int) getStage().getHeight() * 0.33f);
cityScapeMiddle.setX((int) cityScapeLeft.getWidth());
cityScapeMiddle.setWidth((int) getStage().getWidth() - cityScapeLeft.getWidth() - cityScapeRight.getWidth());
cityScape.addActor(cityScapeLeft);
cityScape.addActor(cityScapeMiddle);
cityScape.addActor(cityScapeRight);
container.addActor(cityScape);
cityScape.setY(-getStage().getHeight());
Tween start = Tween.to(cityScape, WidgetAccessor.POSITION, CAMERA_PAN_DOWN_DURATION)
.delay(50)
.target(cityScape.getX(), 0)
.ease(TweenEquations.easeInOutExpo)
.start(TweenSystem.manager());
}
private void makeMainBuilding(boolean animateBuildOut) {
Image mainBuilding = new Image(new TextureRegionDrawable(atlas1.findRegion("main-building")), fit);
mainBuilding.setHeight(getStage().getHeight() * 0.85f);
mainBuilding.layout();
mainBuilding.setX(getStage().getWidth() / 2 - (mainBuilding.getWidth() / 2));
mainBuilding.setY(0);
container.addActor(mainBuilding);
if (animateBuildOut) {
mainBuilding.setY(-getStage().getHeight());
Tween.to(mainBuilding, WidgetAccessor.POSITION, CAMERA_PAN_DOWN_DURATION)
.delay(50)
.target(mainBuilding.getX(), 0)
.ease(TweenEquations.easeInOutExpo)
.start(TweenSystem.manager());
}
}
private void makeDroidTowersLogo(boolean animateBuildOut) {
boolean purchasedUnlimited = Platform.getPurchaseManager().hasPurchasedUnlimitedVersion();
TextureAtlas.AtlasRegion droidTowersLogoTexture = purchasedUnlimited ? atlas2.findRegion("droid-towers-logo-unlimited") : atlas2.findRegion("droid-towers-logo");
droidTowersLogo = new Image(new TextureRegionDrawable(droidTowersLogoTexture), fit);
droidTowersLogo.setWidth(Math.min(getStage().getWidth() * 0.5f, droidTowersLogo.getWidth()));
droidTowersLogo.layout();
droidTowersLogo.setY(getStage().getHeight() - droidTowersLogo.getImageHeight() - 75);
droidTowersLogo.setX(50);
if (animateBuildOut) {
droidTowersLogo.setX(-droidTowersLogo.getImageWidth());
Tween.to(droidTowersLogo, WidgetAccessor.POSITION, CAMERA_PAN_DOWN_DURATION)
.delay(50)
.target(50, droidTowersLogo.getY())
.ease(TweenEquations.easeInOutExpo)
.start(TweenSystem.manager());
}
container.addActor(droidTowersLogo);
}
private void makeHappyDroid(boolean animateBuildOut) {
AnimatedHappyDroid happyDroidImage = new AnimatedHappyDroid();
happyDroidImage.setHeight(getStage().getHeight() * 0.33f);
happyDroidImage.setPosition(getStage().getWidth() / 2, 0);
if (animateBuildOut) {
happyDroidImage.setY(-getStage().getHeight());
Tween.to(happyDroidImage, WidgetAccessor.POSITION, CAMERA_PAN_DOWN_DURATION)
.target(happyDroidImage.getX(), 0)
.ease(TweenEquations.easeInOutExpo)
.start(TweenSystem.manager());
}
container.addActor(happyDroidImage);
}
@Override
public void pause() {
}
@Override
public void resume() {
createdSplashScene = false;
container.clear();
}
@Override
public void render(float deltaTime) {
if (!createdSplashScene) {
if (isLoaded("backgrounds/splash1.txt") &&
isLoaded("backgrounds/splash1.png") &&
isLoaded("backgrounds/splash2.txt") &&
isLoaded("backgrounds/splash2.png") &&
isLoaded("happydroid.txt") &&
isLoaded("happydroid.png") &&
isLoaded("backgrounds/cityscape-middle.png")) {
buildSplashScene();
}
}
if (!createdAudioControls &&
isLoaded("hud/buttons.txt") &&
isLoaded("hud/heyzap-checkin.txt") &&
DroidTowersGame.getSoundController() != null) {
createdAudioControls = true;
TextureAtlas buttonsAtlas = TowerAssetManager.textureAtlas("hud/buttons.txt");
AudioControl audioControl = new AudioControl(buttonsAtlas);
Table c = new Table();
c.row().space(Display.devicePixel(8));
if (Gdx.app.getType().equals(Application.ApplicationType.Android)) {
c.add(new HeyZapCheckInButton());
}
c.add(audioControl);
c.pack();
c.setX(getStage().getWidth() - c.getWidth() - 16);
c.setY(getStage().getHeight() - c.getHeight() - 32);
addActor(c);
}
}
private void buildSplashScene() {
createdSplashScene = true;
atlas1 = TowerAssetManager.textureAtlas("backgrounds/splash1.txt");
atlas2 = TowerAssetManager.textureAtlas("backgrounds/splash2.txt");
makeCloudLayer();
makeCityScape();
makeMainBuilding(true);
makeDroidTowersLogo(true);
makeHappyDroid(true);
}
@Override
public void dispose() {
}
}