GameOverScreen.java
package com.skloch.game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.Window;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import java.awt.*;
/**
* A screen that displays the player's stats at the end of the game.
* Currently doesn't calculate a score
*/
public class GameOverScreen implements Screen {
private HustleGame game;
Stage gameOverStage;
Viewport viewport;
OrthographicCamera camera;
int Score = 0;
/**
* A screen to display a 'Game Over' screen when the player finishes their exams
* Currently does not calculate a score, just shows the player's stats to them, as requested in assessment 1
* Tracking them now will make win conditions easier to implement for assessment 2
*
* @param game An instance of HustleGame
* @param hoursStudied The hours studied in the playthrough
* @param hoursRecreational The hours of fun had in the playthrough
* @param hoursSlept The hours slept in the playthrough
*/
public GameOverScreen (final HustleGame game, int hoursStudied, int hoursRecreational, int hoursSlept) {
this.game = game;
gameOverStage = new Stage(new FitViewport(game.WIDTH, game.HEIGHT));
Gdx.input.setInputProcessor(gameOverStage);
camera = new OrthographicCamera();
viewport = new FitViewport(game.WIDTH, game.HEIGHT, camera);
camera.setToOrtho(false, game.WIDTH, game.HEIGHT);
// Create the window
Window gameOverWindow = new Window("", game.skin);
gameOverStage.addActor(gameOverWindow);
// Table for UI elements in window
Table gameOverTable = new Table();
gameOverWindow.add(gameOverTable);
// Title
Label title = new Label("Game Over!", game.skin, "button");
gameOverTable.add(title).padTop(10);
gameOverTable.row();
Table scoresTable = new Table();
gameOverTable.add(scoresTable).prefHeight(380).prefWidth(450);
gameOverTable.row();
//score calculation
calculateScore(hoursStudied, hoursRecreational, hoursSlept);
// Display scores
scoresTable.add(new Label("Hours Studied", game.skin, "interaction")).padBottom(5);
scoresTable.row();
scoresTable.add(new Label(String.valueOf(hoursStudied), game.skin, "button")).padBottom(5);
scoresTable.row();
scoresTable.add(new Label("Recreational hours", game.skin, "interaction")).padBottom(5);
scoresTable.row();
scoresTable.add(new Label(String.valueOf(hoursRecreational), game.skin, "button")).padBottom(5);
scoresTable.row();
scoresTable.add(new Label("Hours Slept", game.skin, "interaction")).padBottom(5);
scoresTable.row();
scoresTable.add(new Label(String.valueOf(hoursSlept), game.skin, "button")).padBottom(10);
scoresTable.row();
scoresTable.add(new Label("Score: " + Score, game.skin, "button"));
scoresTable.row();
// Exit button
TextButton exitButton = new TextButton("Next", game.skin);
gameOverTable.add(exitButton).bottom().width(300).padTop(10);
exitButton.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
game.soundManager.playButton();
game.soundManager.overworldMusic.stop();
dispose();
game.gameScreen.leaderboardOpen();
game.setScreen(new LeaderboardScreen(game, Score));
}
});
gameOverWindow.pack();
gameOverWindow.setSize(600, 600);
// Centre the window
gameOverWindow.setX((viewport.getWorldWidth() / 2) - (gameOverWindow.getWidth() / 2));
gameOverWindow.setY((viewport.getWorldHeight() / 2) - (gameOverWindow.getHeight() / 2));
}
public void calculateScore(int hoursStudied, int hoursRecreational, int hoursSlept){
if (hoursSlept > 50 && hoursSlept < 70){ //slept a good amount
Score += hoursSlept - 10;
}
else if (hoursSlept < 50){ //not enough sleep
Score += hoursSlept / 2;
}
else{ //too much sleep
Score += 80 - (hoursSlept - 80);
}
if (hoursStudied > 30 && hoursStudied < 50){ //Studied a good amount
Score += hoursStudied + 20;
}
else if (hoursStudied < 30){ //not enough Studying
Score += hoursStudied / 2;
}
else{ //too much Studying
Score += 50 - (hoursStudied - 50);
}
if (hoursRecreational > 30 && hoursRecreational < 50){ //relaxed a good amount
Score += hoursRecreational;
}
else if (hoursRecreational < 30){ //not enough relaxing
Score += hoursRecreational / 2;
}
else{ //too much relaxing
Score += 50 - (hoursRecreational - 50);
}
}
/**
* Renders the screen and the background each frame
* @param delta The time in seconds since the last render.
*/
@Override
public void render(float delta) {
ScreenUtils.clear(0, 0, 0, 1);
game.blueBackground.draw();
gameOverStage.act(delta);
gameOverStage.draw();
camera.update();
}
/**
* Correctly resizes the onscreen elements when the window is resized
* @param width
* @param height
*/
@Override
public void resize(int width, int height) {
gameOverStage.getViewport().update(width, height);
viewport.update(width, height);
}
// Other required methods from Screen
@Override
public void show() {
}
@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
}
}