package com.igorcrevar.goingunder;
import com.badlogic.gdx.Application.ApplicationType;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Preferences;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.igorcrevar.goingunder.objects.IGameObject;
import com.igorcrevar.goingunder.objects.Player;
import com.igorcrevar.goingunder.objects.StaticBackground;
public class GameManager {
private final String GameSaves = "gamesaves";
private AssetManager assetManager = new AssetManager();
private int currentScore;
private int topScore;
private boolean isPlayerAlive;
private boolean isSoundOn;
private int totalScoreSum;
private int totalGamesPlayed;
private IGameObject background;
private Player player;
public GameManager() {
isPlayerAlive = false;
topScore = 0;
currentScore = 0;
//load top score, etc
Preferences prefs = Gdx.app.getPreferences(GameSaves);
topScore = prefs.getInteger("topscore");
isSoundOn = prefs.getBoolean("sound_on", true);
totalGamesPlayed = prefs.getInteger("total_games_played", 0);
totalScoreSum = prefs.getInteger("total_score_sum", 0);
// add all needed assets to queue
assetManager.load("fonts/arial64.fnt", BitmapFont.class);
assetManager.load("atlases/game.atlas", TextureAtlas.class);
assetManager.load("atlases/widgets.atlas", TextureAtlas.class);
assetManager.load("sounds/coin.wav", Sound.class);
assetManager.load("sounds/move.wav", Sound.class);
assetManager.load("sounds/die.wav", Sound.class);
assetManager.load("sounds/intro.ogg", Music.class);
}
public void setSoundOn(boolean value) {
isSoundOn = value;
Preferences prefs = Gdx.app.getPreferences(GameSaves);
prefs.putBoolean("sound_on", value);
prefs.flush();
// setSoundOn can only be called from intro
if (isSoundOn) {
playIntroMusic();
}
else {
stopIntroMusic();
}
}
public void startGame() {
isPlayerAlive = true;
currentScore = 0;
}
public void finishGame() {
isPlayerAlive = false;
}
public void saveScoreEtc() {
Preferences prefs = Gdx.app.getPreferences(GameSaves);
// sum of all scores ever
totalScoreSum += currentScore;
prefs.putInteger("total_score_sum", totalScoreSum);
// games played by player
++totalGamesPlayed;
prefs.putInteger("total_games_played", totalGamesPlayed);
// save top score
if (topScore < currentScore) {
topScore = currentScore;
// Save top score!!!!
prefs.putInteger("topscore", topScore);
}
// hack / dont want to kill my ssd
if (Gdx.app.getType() != ApplicationType.Desktop) {
prefs.flush();
}
}
public void savePreferences() {
// hack / on desktop when disposing app, preferences should be saved (otherwise I'm killing my ssd)
if (Gdx.app.getType() == ApplicationType.Desktop) {
Preferences prefs = Gdx.app.getPreferences(GameSaves);
prefs.flush();
}
}
public void addScore(int value) {
currentScore += value;
playCoinSound();
}
public boolean isGameActive() {
return isPlayerAlive;
}
public int getCurrentScore() {
return currentScore;
}
public int getTopScore() {
return topScore;
}
public int getTotalScoreSum() {
return totalScoreSum;
}
public int getTotalGamesPlayed() {
return totalGamesPlayed;
}
public boolean getIsSoundOn() {
return isSoundOn;
}
/**
* Update loading of assets
* @return true if loading is finished
*/
public boolean updateLoading() {
return assetManager.update();
}
public void dispose() {
assetManager.dispose();
}
public TextureAtlas getTextureAtlas(String fileName) {
String fullName = "atlases/" + fileName + ".atlas";
return assetManager.get(fullName, TextureAtlas.class);
}
public Texture getTexture(String fileName) {
return assetManager.get("textures/" + fileName, Texture.class);
}
public Sound getSound(String fileName) {
return assetManager.get("sounds/" + fileName, Sound.class);
}
public void playIntroMusic() {
if (isSoundOn) {
Music music = assetManager.get("sounds/intro.ogg", Music.class);
music.setLooping(true);
music.play();
}
}
public void stopIntroMusic() {
Music music = assetManager.get("sounds/intro.ogg", Music.class);
music.stop();
}
public void playCoinSound() {
if (isSoundOn) {
getSound("coin.wav").play();
}
}
public void playMoveSound() {
if (isSoundOn) {
getSound("move.wav").play();
}
}
public void playDieSound() {
if (isSoundOn) {
getSound("die.wav").play();
}
}
public BitmapFont getBitmapFont() {
return assetManager.get("fonts/arial64.fnt", BitmapFont.class);
}
public boolean isBitmapFontLoaded() {
return assetManager.isLoaded("fonts/arial64.fnt", BitmapFont.class);
}
public IGameObject getBackground() {
if (background == null) {
background = new StaticBackground(this);
}
return background;
}
public Player getPlayer() {
if (player == null) {
player = new Player(new TextureRegion[] {
getTextureAtlas("game").findRegion("player1"),
getTextureAtlas("game").findRegion("player2"),
getTextureAtlas("game").findRegion("player3"),
getTextureAtlas("game").findRegion("player2"),
}, new TextureRegion[] {
getTextureAtlas("game").findRegion("player_die")
});
}
return player;
}
}