package com.igorcrevar.goingunder.objects;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.igorcrevar.goingunder.GameData;
import com.igorcrevar.goingunder.GameManager;
import com.igorcrevar.goingunder.utils.GameHelper;
import com.igorcrevar.goingunder.utils.Mathf;
public class PauseButtonObject {
private static final float PosX = 50f;
private static final float PosY = 1800f;
private static final float Width = 160.0f;
private static final float Height = 120.0f;
private static final float ShrinkFactorX = 40.0f;
private static final float ShrinkFactorY = 20.0f;
private enum GameActiveStatus {
Resuming, Paused, Active
};
private float resumingCounter;
private Sprite pauseButton = new Sprite();
private GameActiveStatus status;
private GameManager gameManager;
public void init(GameManager gameManager) {
status = GameActiveStatus.Active;
this.gameManager = gameManager;
resumingCounter = 0.0f;
pauseButton.setBounds(PosX + ShrinkFactorX, PosY + ShrinkFactorY, Width - 2 * ShrinkFactorX, Height - 2 * ShrinkFactorY);
pauseButton.setRegion(gameManager.getTextureAtlas("game").findRegion("pause"));
}
public boolean isGameActive() {
return status == GameActiveStatus.Active;
}
public void draw(BitmapFont font, SpriteBatch batch) {
if (status != GameActiveStatus.Resuming) {
pauseButton.draw(batch);
}
else {
int cnt = 3 - (int)(resumingCounter);
String txt = cnt <= 0 ? "Go!" : String.valueOf(cnt);
float tmp = resumingCounter - (int)resumingCounter;
font.setScale(Mathf.lerp(2.5f, 1.0f, tmp));
float middlePos = (1f / GameData.AspectRatio * 1920.0f) / 2.0f - font.getBounds(txt).width / 2.0f;
font.draw(batch, txt, middlePos, 1200f);
font.setScale(1.0f);
}
}
public boolean isTouched(GameData gameData, int x, int y) {
// float xx = GameHelper.screenX2WorldX(gameData, x);
// float yy = GameHelper.screenY2WorldY(gameData, y);
float xx = GameHelper.screenX2OtherX(x, 1f / GameData.AspectRatio * 1920.0f);
float yy = GameHelper.screenY2OtherY(y, 1920f);
if (GameHelper.tapPointInsideRectangle(xx, yy, PosX, PosY + Height, Width, Height)) {
if (status == GameActiveStatus.Active) {
pauseButton.setRegion(gameManager.getTextureAtlas("game").findRegion("resume"));
status = GameActiveStatus.Paused;
}
else if (status == GameActiveStatus.Paused) {
pauseButton.setRegion(gameManager.getTextureAtlas("game").findRegion("pause"));
status = GameActiveStatus.Resuming;
resumingCounter = 0.0f;
}
return true;
}
return false;
}
public void update(float deltaTime) {
if (status == GameActiveStatus.Resuming) {
resumingCounter += deltaTime;
if (resumingCounter >= 4f) {
status = GameActiveStatus.Active;
}
}
}
}