package gr.sullenart.games.fruitcatcher.screens;
import gr.sullenart.games.fruitcatcher.FruitCatcherGame;
import gr.sullenart.games.fruitcatcher.images.ImageProvider;
import gr.sullenart.games.fruitcatcher.models.GameModelFactory;
import gr.sullenart.games.fruitcatcher.state.State;
import gr.sullenart.games.fruitcatcher.view.Button;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector3;
public class LevelScreen implements Screen, InputProcessor {
private String TAG = LevelScreen.class.getName();
private ImageProvider imageProvider;
private Texture backgroundImage;
private Button [] buttons;
private SpriteBatch batch;
private OrthographicCamera camera;
private FruitCatcherGame game;
private boolean [] isLevelUnlocked;
public LevelScreen(FruitCatcherGame game) {
super();
this.game = game;
}
@Override
public void show() {
isLevelUnlocked = new boolean[GameModelFactory.LEVEL_COUNT];
isLevelUnlocked[0] = true;
for(int i=1; i<GameModelFactory.LEVEL_COUNT; i++) {
isLevelUnlocked[i] = State.isLevelUnlocked(i);
}
imageProvider = game.getImageProvider();
backgroundImage = imageProvider.getBackgroundSpring();
TextureRegion buttonBg = imageProvider.getButton();
buttons = new Button [4];
buttons[0] = new Button(buttonBg, imageProvider.getLevel(),
imageProvider.getNumber(1), 5);
if (isLevelUnlocked[1]) {
buttons[1] = new Button(buttonBg, imageProvider.getLevel(),
imageProvider.getNumber(2), 5);
}
else {
buttons[1] = new Button(buttonBg, imageProvider.getLevelGrey(),
imageProvider.getGrey2(), 5);
}
if (isLevelUnlocked[2]) {
buttons[2] = new Button(buttonBg, imageProvider.getLevel(),
imageProvider.getNumber(3), 5);
}
else {
buttons[2] = new Button(buttonBg, imageProvider.getLevelGrey(),
imageProvider.getGrey3(), 5);
}
buttons[3] = new Button(imageProvider.getBack());
camera = new OrthographicCamera();
camera.setToOrtho(false, imageProvider.getScreenWidth(), imageProvider.getScreenHeight());
batch = new SpriteBatch();
int buttonMargin = 15;
int buttonsHeight = 2*buttonMargin;
int centeredButtons = 3;
for(int i=0; i<centeredButtons; i++) {
buttonsHeight += buttons[i].getRegionHeight();
}
for(int i=centeredButtons-1;i>=0;i--) {
int x, y;
x = (imageProvider.getScreenWidth() - buttons[i].getRegionWidth())/2;
if (i == centeredButtons - 1) {
y = (imageProvider.getScreenHeight() - buttonsHeight) / 2;
}
else {
y = ((int) buttons[i+1].getPosY()) +
buttons[i+1].getRegionHeight() + buttonMargin;
}
buttons[i].setPos(x, y);
}
buttons[3].setPos(10, 10);
Gdx.input.setInputProcessor(this);
Gdx.input.setCatchBackKey(true);
}
@Override
public void render(float delta) {
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(backgroundImage, 0, 0);
for(int i=0;i<buttons.length;i++) {
buttons[i].draw(batch);
}
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
if (batch != null) {
batch.dispose();
}
}
@Override
public boolean keyDown(int keycode) {
if(keycode == Keys.BACK){
game.gotoMenuScreen();
}
return true;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
Vector3 touchPos = new Vector3();
touchPos.set(screenX, screenY, 0);
camera.unproject(touchPos);
for(int i=0;i<buttons.length;i++) {
if (buttons[i].isPressed(touchPos)) {
Gdx.app.log(TAG, "Button " + (i+1) + " pressed");
if (i < 3 && isLevelUnlocked[i]) {
game.startGame(i);
game.gotoGameScreen(null);
}
else if (i == 3) {
game.gotoMenuScreen();
}
break;
}
}
return true;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
}