package de.dbaelz.secludedness.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import de.dbaelz.secludedness.MainGame;
import de.dbaelz.secludedness.level.LevelStatistic;
import de.dbaelz.secludedness.manager.GPGSAchievement;
import de.dbaelz.secludedness.manager.GPGSManager;
public class ResultScreen extends AbstractScreen {
private LevelStatistic mLevelStatistic;
private TextureAtlas mAtlas;
private Skin mSkin;
private Table mTable;
public ResultScreen(MainGame game, LevelStatistic statistic) {
super(game);
mLevelStatistic = statistic;
manageAchievements();
}
@Override
public void show() {
super.show();
mAtlas = new TextureAtlas(Gdx.files.internal("ui/uiskin.atlas"));
FileHandle skinFile = Gdx.files.internal( "ui/uiskin.json" );
mSkin = new Skin(skinFile);
final int buttonWidth = 250;
final int buttonHeight = 30;
Label finishedLabel = new Label("== LEVEL FINISHED ==", mSkin);
String result = "You've actually survived!";
if (mLevelStatistic.getHealth() == 0) {
result = "OOOhhh, you lost!";
}
Label resultLabel = new Label(result, mSkin);
Label movesLabel = new Label("Moves: " + mLevelStatistic.getMoves(), mSkin);
Label teleportsLabel = new Label("Teleports: " + mLevelStatistic.getTeleports(), mSkin);
Label trapsLabel = new Label("Traps: " + mLevelStatistic.getTraps(), mSkin);
Label healthLabel = new Label("Health: " + mLevelStatistic.getHealth() + "/" + mLevelStatistic.getStartHealth(), mSkin);
TextButton repeatLevel = new TextButton("REPEAT LEVEL", mSkin);
repeatLevel.addListener(new ClickListener() {
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
super.touchUp(event, x, y, pointer, button);
mGame.setScreen(new LevelScreen(mGame, false, mLevelStatistic.getLevelFilename()));
}
});
TextButton returnMenuScreen = new TextButton("RETURN TO MENU", mSkin);
returnMenuScreen.addListener(new ClickListener() {
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
super.touchUp(event, x, y, pointer, button);
mGame.setScreen(new MenuScreen(mGame));
}
});
mTable = new Table(mSkin);
mTable.setFillParent(true);
mStage.addActor(mTable);
mTable.add(finishedLabel);
mTable.row();
mTable.add(resultLabel);
mTable.row();
mTable.add(movesLabel);
mTable.row();
mTable.add(teleportsLabel);
mTable.row();
mTable.add(trapsLabel);
mTable.row();
mTable.add(healthLabel);
mTable.row();
mTable.add(repeatLevel).size(buttonWidth, buttonHeight).uniform().spaceBottom(10).spaceTop(30);
mTable.row();
mTable.add(returnMenuScreen).size(buttonWidth, buttonHeight).uniform().spaceBottom(10);
}
@Override
public void hide() {
super.hide();
mAtlas.dispose();
mSkin.dispose();
}
private void manageAchievements() {
GPGSManager manager = mGame.getGPGSManager();
if (manager.isSignedIn()) {
manager.unlockAchievement(GPGSAchievement.PLAY_RANDOM_LEVEL.getAchievementID());
manager.incrementAchievement(GPGSAchievement.FIFTY_RANDOM_LEVELS.getAchievementID(), 1);
// Moves
if (mLevelStatistic.getMoves() > 0) {
manager.incrementAchievement(GPGSAchievement.ONEHUNDRED_MOVES.getAchievementID(), mLevelStatistic.getMoves());
manager.incrementAchievement(GPGSAchievement.FIVEHUNDRED_MOVES.getAchievementID(), mLevelStatistic.getMoves());
manager.incrementAchievement(GPGSAchievement.THOUSAND_MOVES.getAchievementID(), mLevelStatistic.getMoves());
}
// Teleports
if (mLevelStatistic.getTeleports() > 0) {
manager.incrementAchievement(GPGSAchievement.ONEHUNDRED_TELEPORTS.getAchievementID(), mLevelStatistic.getTeleports());
manager.incrementAchievement(GPGSAchievement.TWOHUNDRED_TELEPORTS.getAchievementID(), mLevelStatistic.getTeleports());
manager.incrementAchievement(GPGSAchievement.THREEHUNDRED_TELEPORTS.getAchievementID(), mLevelStatistic.getTeleports());
}
// Damage
int damage = Math.abs(mLevelStatistic.getHealth() - mLevelStatistic.getStartHealth());
if (damage > 0) {
manager.incrementAchievement(GPGSAchievement.ONEHUNDRED_DAMAGE.getAchievementID(), damage);
manager.incrementAchievement(GPGSAchievement.TWOHUNDRED_DAMAGE.getAchievementID(), damage);
manager.incrementAchievement(GPGSAchievement.THREEHUNDRED_DAMAGE.getAchievementID(), damage);
}
// Lose or win
if (mLevelStatistic.getHealth() == 0) {
manager.unlockAchievement(GPGSAchievement.FAIL_LEVEL.getAchievementID());
manager.incrementAchievement(GPGSAchievement.LOSE_TWOHUNDRED_LEVELS.getAchievementID(), 1);
} else {
manager.unlockAchievement(GPGSAchievement.MASTER_LEVEL.getAchievementID());
manager.incrementAchievement(GPGSAchievement.WIN_TWOHUNDRED_LEVELS.getAchievementID(), 1);
}
}
}
}