package com.cookbook.samples;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Animation;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.cookbook.animation.SpriteAnimationData;
import com.cookbook.animation.SpriteAnimationLoader;
public class CustomLoaderSample extends GdxSample {
private static final String TAG = "CustomLoaderSample";
private OrthographicCamera camera;
private SpriteBatch batch;
private Texture background, logo, progressBarImg, progressBarBaseImg;
private SpriteAnimationData cavemanAnims;
private Animation cavemanWalk;
private int cavemanX;
private int cavemanSpeed;
private TextureRegion currentFrame;
private boolean goingRight;
private float animationTime;
private Vector2 logoPos, pbPos;
private boolean loaded = false;
private AssetManager manager;
@Override
public void create () {
batch = new SpriteBatch();
manager = new AssetManager();
animationTime = 0.0f;
// Position the camera at 0,0 with up-growing Y
camera = new OrthographicCamera();
camera.setToOrtho(false);
manager.setLoader(SpriteAnimationData.class, new SpriteAnimationLoader(new InternalFileHandleResolver()));
manager.load("data/loading_screen/background.png", Texture.class);
manager.load("data/loading_screen/logo.png", Texture.class);
manager.load("data/loading_screen/progress_bar.png", Texture.class);
manager.load("data/loading_screen/progress_bar_base.png", Texture.class);
manager.finishLoading(); // Blocks until all resources are loaded into memory
Gdx.app.log(TAG, "Assets loaded");
// Get Assets
background = manager.get("data/loading_screen/background.png");
logo = manager.get("data/loading_screen/logo.png");
progressBarImg = manager.get("data/loading_screen/progress_bar.png");
progressBarBaseImg = manager.get("data/loading_screen/progress_bar_base.png");
// Get logo position
logoPos = new Vector2();
// >> bitwise operator bill just divide by 2, the explicitly written times, in this case 1
logoPos.set((Gdx.graphics.getWidth()-logo.getWidth())>>1, Gdx.graphics.getHeight()>>1);
// ProgressBar position
pbPos = new Vector2();
pbPos.set(logoPos.x, logoPos.y - (logo.getHeight()));
// Load assets for the next screen
manager.load("data/caveman-sheet.json", SpriteAnimationData.class);
}
@Override
public void dispose() {
manager.dispose();
batch.dispose();
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// Update animationTime
animationTime += Gdx.graphics.getDeltaTime();
camera.update();
batch.setProjectionMatrix(camera.combined);
// Render background image
batch.begin();
batch.draw(background, 0, 0);
batch.end();
// Check if async load is done
if(!loaded) {
// Render Logo and Loading Bar
batch.begin();
batch.draw(logo, logoPos.x, logoPos.y);
batch.draw(progressBarBaseImg, pbPos.x, pbPos.y);
batch.draw(progressBarImg, pbPos.x, pbPos.y, progressBarImg.getWidth()*manager.getProgress(), progressBarImg.getHeight());
batch.end();
if (manager.update()) {
// Initialize params for caveman
loaded = true;
cavemanAnims = manager.get("data/caveman-sheet.json");
cavemanWalk = cavemanAnims.getAnimation("walk");
currentFrame = cavemanWalk.getKeyFrames()[0];
cavemanX = 0;
cavemanSpeed = 180;
goingRight = true;
Gdx.app.log(TAG, "Instructions");
Gdx.app.log(TAG, "- Press Left key to move left");
Gdx.app.log(TAG, "- Press Right key to move right");
}
}
else {
// Caveman resources are loaded... let's have some fun
updateCaveman();
batch.begin();
batch.draw(currentFrame, cavemanX, .0f);
batch.end();
}
}
// Move caveman sprite along the screen (no limits applied)
private void updateCaveman() {
if(Gdx.input.isKeyPressed(Keys.DPAD_LEFT)) {
if(goingRight) {
for(TextureRegion t : cavemanWalk.getKeyFrames())
t.flip(true, false);
goingRight = false;
}
cavemanX -= Gdx.graphics.getDeltaTime() * cavemanSpeed;
currentFrame = cavemanWalk.getKeyFrame(animationTime, true);
}
if(Gdx.input.isKeyPressed(Keys.DPAD_RIGHT)) {
if(!goingRight) {
goingRight = true;
for(TextureRegion t : cavemanWalk.getKeyFrames())
t.flip(true, false);
}
cavemanX += Gdx.graphics.getDeltaTime() * cavemanSpeed;
currentFrame = cavemanWalk.getKeyFrame(animationTime, true);
}
}
}