package com.igorcrevar.rolloverchuck.scenes.GameMode;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.igorcrevar.rolloverchuck.ISceneManager;
import com.igorcrevar.rolloverchuck.objects.EndGameButtonsObject;
import com.igorcrevar.rolloverchuck.utils.GameHelper;
import com.igorcrevar.rolloverchuck.utils.Mathf;
import com.igorcrevar.rolloverchuck.utils.MyFontDrawer;
import com.igorcrevar.rolloverchuck.utils.MyFontDrawerBatch;
import com.igorcrevar.rolloverchuck.utils.MyFontDrawerDefaultFont;
public class ArcadeGameMode implements IGameMode {
private static final float PauseAfterEndGame = 2.0f;
private int countDown;
private ISceneManager sceneManager;
private Sprite pointImage = new Sprite();
private EndGameButtonsObject buttons;
private float endGameTimer;
private boolean isSaved;
// batch for custom font
private MyFontDrawerBatch myFontDrawerBatch = new MyFontDrawerBatch(new MyFontDrawerDefaultFont(), 1920, 1080);
private MyFontDrawer title;
public ArcadeGameMode(ISceneManager sceneManager) {
this.sceneManager = sceneManager;
buttons = new EndGameButtonsObject(sceneManager, 450);
title = new MyFontDrawer("Time's up!", 25.0f, 25.0f, 10.0f, 0.00001f);
title.setUVMinMax(sceneManager.getGameManager().getTextureAtlas("base").findRegion("myfont"));
title = myFontDrawerBatch.addNew(title);
}
@Override
public void init() {
isSaved = false;
countDown = getCountdownFrom();
endGameTimer = 0.0f;
pointImage.setRegion(sceneManager.getGameManager().getTextureAtlas("base").findRegion("clock"));
pointImage.setSize(60, 60);
pointImage.setPosition(1620, 850);
}
@Override
public void update(float timer, float deltaTime) {
if (sceneManager.isGameActive()) {
countDown = getCountdownFrom() - (int)timer;
if (countDown < 1) {
sceneManager.setGameState(com.igorcrevar.rolloverchuck.ISceneManager.GameState.GAMEOVER);
endGameTimer = 0.0f;
}
}
else if (sceneManager.isGameOver()) {
endGameTimer += deltaTime;
}
}
@Override
public void drawSprites(BitmapFont font, SpriteBatch spriteBatch) {
pointImage.draw(spriteBatch);
font.draw(spriteBatch, String.valueOf(countDown), 1700, 900);
if (!sceneManager.isGameActive()) {
float scale = Mathf.lerp(0.0f, 1.0f, endGameTimer / PauseAfterEndGame);
Sprite overlaySprite = sceneManager.getGameManager().getOverlaySprite(0.0f, 0.65f);
overlaySprite.setScale(scale);
overlaySprite.draw(spriteBatch);
if (endGameTimer > PauseAfterEndGame) {
if (!isSaved) {
isSaved = true;
// save
sceneManager.finishGame(true);
}
font.setScale(1.0f);
String sc = "New Score: " + GameHelper.getStringPoints(sceneManager.getCurrentScore());
font.setColor(Color.BLACK);
font.draw(spriteBatch, sc, (1920 - font.getBounds(sc).width) / 2.0f + 5.0f, 650);
font.setColor(Color.WHITE);
font.draw(spriteBatch, sc, (1920 - font.getBounds(sc).width) / 2.0f, 660.0f);
sc = "Top Score: " + GameHelper.getStringPoints(sceneManager.getGameManager().getTopScore(sceneManager.getCurrentGameType()));
font.setColor(Color.BLACK);
font.draw(spriteBatch, sc, (1920 - font.getBounds(sc).width) / 2.0f + 5.0f, 550);
font.setColor(Color.WHITE);
font.draw(spriteBatch, sc, (1920 - font.getBounds(sc).width) / 2.0f, 560.0f);
buttons.draw(spriteBatch);
}
}
}
@Override
public TextureRegion getFieldTextureRegion() {
String texture = "";
switch (sceneManager.getCurrentGameType().getDifficulty()) {
case Easy:
texture = "field1";
break;
case Medium:
texture = "field2";
break;
case Hard:
texture = "field3";
break;
}
return sceneManager.getGameManager().getTextureAtlas("base").findRegion(texture);
}
@Override
public void touchUp(int screenX, int screenY, int pointer, int button) {
if (endGameTimer > PauseAfterEndGame) {
buttons.check(screenX, screenY);
}
}
private int getCountdownFrom() {
return sceneManager.getGameManager().getGameData().ArcadeGameTimer;
}
@Override
public void postUpdate(SpriteBatch spriteBatch) {
if (!sceneManager.isGameActive()) {
float xPos = Mathf.lerp(1920.0f, (1920 - title.getWidth()) / 2.0f, endGameTimer / PauseAfterEndGame);
title.idt().translate(xPos, 900f, 0.0f);
myFontDrawerBatch.draw(sceneManager.getGameManager().getShader("region"), sceneManager.getGameManager().getTextureAtlas("base").findRegion("myfont").getTexture());
}
}
@Override
public void dispose() {
myFontDrawerBatch.dispose();
}
}