package at.maui.flopsydroid.game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Event;
import com.badlogic.gdx.scenes.scene2d.EventListener;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import at.maui.flopsydroid.FlopsyDroidGame;
/**
* Created by maui on 07.07.2014.
*/
public class FlopsyScreen implements Screen {
public final static float SPEED = 3f;
public final static float PIPE_INTERVAL = 1.4f;
private TextureAtlas mTextureAtlas;
private Stage mStage;
private Ground mGround;
private Droid mAndy;
private float mTimeSinceLastPipe;
private boolean mInitialTap = false;
private Label mScoreLabel;
private int mScore = 0;
private Label.LabelStyle mLabelStyle;
private OnGlobalListener mGlobalListener;
public FlopsyScreen(FlopsyDroidGame game, OnGlobalListener listener) {
mStage = new Stage();
mGlobalListener = listener;
game.getAssetManager().load("flopsy.sprites", TextureAtlas.class);
game.getAssetManager().finishLoading();
mTextureAtlas = game.getAssetManager().get("flopsy.sprites", TextureAtlas.class);
mLabelStyle = new Label.LabelStyle();
mLabelStyle.font = new BitmapFont(Gdx.files.internal("flappyfont.fnt"),
Gdx.files.internal("flappyfont.png"), false);
mStage.addListener(new EventListener() {
@Override
public boolean handle(Event event) {
if(event.getTarget().equals(mAndy)) {
mGround.onDroidCollision();
return true;
}
return false;
}
});
}
public void addScoreLabel() {
mScoreLabel = new Label("0", mLabelStyle);
mScoreLabel.setPosition(
mStage.getViewport().getViewportWidth() / 2 - mScoreLabel.getWidth() / 2,
mStage.getViewport().getViewportHeight() - mScoreLabel.getHeight());
mStage.addActor(mScoreLabel);
}
@Override
public void render(float delta) {
// Clear frame
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// Handle touches
if(Gdx.input.justTouched()) {
if(!mInitialTap)
mInitialTap = true;
if(mAndy.isDead()) {
reset();
} else {
mAndy.tapped();
}
}
mTimeSinceLastPipe += delta;
if (mTimeSinceLastPipe > PIPE_INTERVAL && !mAndy.isDead() && mInitialTap) {
mTimeSinceLastPipe = 0;
addPipe();
}
mStage.act();
mStage.draw();
}
public void addPipe() {
int r = Utils.random(0, 7);
float dy = r * 10;
r = Utils.random(0, 1);
if (r == 0) {
dy = -dy;
}
Pipe pipe1 = new Pipe(mTextureAtlas.findRegion("pipe", 1), mStage, mAndy, true, new OnScoreListener() {
@Override
public void onScored() {
mScore++;
mScoreLabel.setText(""+mScore);
if(mGlobalListener != null)
mGlobalListener.onScored();
}
});
pipe1.setZIndex(1);
float x = mStage.getViewport().getViewportWidth();
float y = (mStage.getViewport().getViewportHeight() - Ground.GROUND_HEIGHT) / 2
+ Ground.GROUND_HEIGHT + Pipe.PIPE_HOLE / 2;
pipe1.setPosition(x, y + dy);
Pipe pipe2 = new Pipe(mTextureAtlas.findRegion("pipe", 2), mStage, mAndy);
pipe2.setZIndex(1);
y = (mStage.getViewport().getViewportHeight() - Ground.GROUND_HEIGHT) / 2
+ Ground.GROUND_HEIGHT - pipe2.getHeight()
- Pipe.PIPE_HOLE / 2;
pipe2.setPosition(x, y + dy);
mStage.addActor(pipe1);
mStage.addActor(pipe2);
mScoreLabel.setZIndex(pipe1.getZIndex());
mGround.setZIndex(pipe2.getZIndex());
mAndy.setZIndex(pipe2.getZIndex());
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
reset();
}
@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
}
public void reset() {
mStage.clear();
mInitialTap = false;
addBackground();
mScore = 0;
addAndy();
addScoreLabel();
addGround();
}
public void addAndy() {
TextureRegion[] droidRegions = new TextureRegion[] {
mTextureAtlas.findRegion("andy", 1), mTextureAtlas.findRegion("andy", 2),
mTextureAtlas.findRegion("andy", 3) };
mAndy = new Droid(droidRegions, new OnDroidCollisionListener() {
@Override
public void onDroidCollision() {
mGround.onDroidCollision();
if(mGlobalListener != null)
mGlobalListener.onGameOver(mScore);
}
});
mAndy.setPosition(mStage.getViewport().getViewportHeight() / 2 - mAndy.getWidth(),
mStage.getViewport().getViewportWidth() / 2);
mStage.addActor(mAndy);
}
public void addGround() {
mGround = new Ground(mTextureAtlas.findRegion("ground"), mAndy);
mStage.addActor(mGround);
}
public void addBackground() {
Image bg = new Image(mTextureAtlas.findRegion("bg"));
mStage.addActor(bg);
}
}