/*
* The MIT License (MIT)
*
* Copyright (c) 2013 Goran Mrzljak
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.turbogerm.helljump.screens.splash;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.turbogerm.germlibrary.util.GameUtils;
import com.turbogerm.helljump.CameraData;
import com.turbogerm.helljump.resources.ResourceNames;
public final class SplashFade {
private static final float FADE_IN_DURATION = 1.5f;
private static final float DELAY_DURATION = 1.0f;
private static final float FADE_OUT_DURATION = 1.5f;
private static final float DELAY_START = FADE_IN_DURATION;
private static final float FADE_OUT_START = DELAY_START + DELAY_DURATION;
private static final float TOTAL_DURATION = FADE_OUT_START + FADE_OUT_DURATION;
private final Sprite mBlackSprite;
private final Rectangle mCameraRect;
private float mInternalTime;
private boolean mIsFadeOutStarted;
public SplashFade(CameraData cameraData, AssetManager assetManager) {
mCameraRect = cameraData.getGuiCameraRect();
TextureAtlas atlas = assetManager.get(ResourceNames.GRAPHICS_GUI_ATLAS);
mBlackSprite = atlas.createSprite(ResourceNames.GUI_GENERAL_BLACK_IMAGE_NAME);
}
public void reset() {
mInternalTime = 0.0f;
mIsFadeOutStarted = false;
}
public void update(float delta) {
if (mInternalTime < TOTAL_DURATION) {
if (mInternalTime >= FADE_OUT_START) {
if (mIsFadeOutStarted) {
mInternalTime += delta;
} else {
mInternalTime = FADE_OUT_START;
}
} else {
mInternalTime += delta;
}
} else {
mInternalTime = TOTAL_DURATION;
}
}
public void render(SpriteBatch batch) {
mBlackSprite.setBounds(mCameraRect.x, mCameraRect.y, mCameraRect.width, mCameraRect.height);
GameUtils.setSpriteAlpha(mBlackSprite, getAlpha());
mBlackSprite.draw(batch);
}
private float getAlpha() {
float alpha;
if (mInternalTime <= DELAY_START) {
alpha = (DELAY_START - mInternalTime) / FADE_IN_DURATION;
} else if (mInternalTime <= FADE_OUT_START) {
alpha = 0.0f;
} else {
alpha = (mInternalTime - FADE_OUT_START) / FADE_OUT_DURATION;
}
return MathUtils.clamp(alpha, 0.0f, 1.0f);
}
public boolean isFinished() {
return mInternalTime >= TOTAL_DURATION;
}
public boolean isFadeOut() {
return mIsFadeOutStarted;
}
public void fadeOut() {
mIsFadeOutStarted = true;
}
}