From edef33e70a1e1dfc189b0a68fc7a49c1f4906f20 Mon Sep 17 00:00:00 2001
From: Turid Dahl <turidcd@stud.ntnu.no>
Date: Fri, 17 Apr 2020 16:14:40 +0200
Subject: [PATCH 01/12] #97 Can't log in as Username

---
 .../com/gameware/game/states/CreateNewTournamentState.java | 2 +-
 frontend/core/src/com/gameware/game/states/LoginState.java | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
index 7057a0e..cc462f9 100644
--- a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
@@ -147,7 +147,7 @@ public class CreateNewTournamentState extends State {
         innerTable.setBackground(backgroundTableBlueRounded);
 
         innerTable.add(makeRow(nameLabel, nameDialog));
-        nameInputField.setMaxLength(10);
+        nameInputField.setMaxLength(9);
         innerTable.add(nameInputField).size(nameFieldWidth, inputFieldHeight);
         innerTable.row();
         removeKeyPadAtTouch();
diff --git a/frontend/core/src/com/gameware/game/states/LoginState.java b/frontend/core/src/com/gameware/game/states/LoginState.java
index b77f1de..78fc4da 100644
--- a/frontend/core/src/com/gameware/game/states/LoginState.java
+++ b/frontend/core/src/com/gameware/game/states/LoginState.java
@@ -216,6 +216,13 @@ public class LoginState extends State {
 
         String username = usernameInputField.getText();
         String password = passwordInputField.getText();
+
+        //Check if username = Username
+        if(username.equals("Username")){
+            errorLabel.setText(wrongLoginText);
+            return;
+        }
+
         try {
             Player player = QueryIntermediate.loginPlayer(username, password);
 
-- 
GitLab


From 88523cc7056afd6352dc3d8c2073566919694ea9 Mon Sep 17 00:00:00 2001
From: ivarnm <36505347+ivarnm@users.noreply.github.com>
Date: Fri, 17 Apr 2020 16:15:14 +0200
Subject: [PATCH 02/12] Add getSpecificTournament in QI

---
 .../core/src/com/gameware/game/QueryIntermediate.java    | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/frontend/core/src/com/gameware/game/QueryIntermediate.java b/frontend/core/src/com/gameware/game/QueryIntermediate.java
index d105adb..73b50ca 100644
--- a/frontend/core/src/com/gameware/game/QueryIntermediate.java
+++ b/frontend/core/src/com/gameware/game/QueryIntermediate.java
@@ -160,6 +160,15 @@ public class QueryIntermediate {
         return tournaments;
     }
 
+    public static Tournament getSpecificTournament(String tournamentID) throws IOException, NoSuchElementException {
+        String route = "tournament/specific/" + tournamentID;
+        String[] response = sendGetRequest(route);
+        checkStatusCode(response);
+        Tournament tournament = json.fromJson(Tournament.class, response[1]);
+        checkObjectNotNull(tournament);
+        return tournament;
+    }
+
     public static Tournament joinATournament(String playerId) throws IOException, NoSuchElementException {
         String route = "tournament/join/";
         Map<String, String> params = new HashMap<>();
-- 
GitLab


From 3b0d79fa719c8b1a7f6b683c342d307537d1bc85 Mon Sep 17 00:00:00 2001
From: Turid Dahl <turidcd@stud.ntnu.no>
Date: Fri, 17 Apr 2020 16:17:48 +0200
Subject: [PATCH 03/12] #97 Adds tournament fetching when clicking in on a
 tournament

---
 .../src/com/gameware/game/states/ViewTournamentState.java | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
index ac4c0fe..03093d1 100644
--- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
@@ -21,6 +21,7 @@ import com.gameware.game.models.Round;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
 
+import java.io.IOException;
 import java.util.List;
 
 public class ViewTournamentState extends State {
@@ -61,7 +62,12 @@ public class ViewTournamentState extends State {
 
     public ViewTournamentState(GameStateManager gsm, Tournament tournament, Round r) {
         super(gsm);
-        this.tournament = tournament;
+        try {
+            this.tournament = QueryIntermediate.getSpecificTournament(tournament.get_id());
+        }catch (IOException e){
+            this.tournament = tournament;
+        }
+
         this.round = r;
         titleLabel.setText(tournament.getName());
         roundDeadline.setText("Round deadline\n"+round.getDeadlineDate().toLocaleString());
-- 
GitLab


From 1ed35ca34f6017514dca047453eb208367ccd1c6 Mon Sep 17 00:00:00 2001
From: Turid Cecilie Dahl <turidcd@stud.ntnu.no>
Date: Fri, 17 Apr 2020 16:24:46 +0200
Subject: [PATCH 04/12] #97 fetches round when clicking on tournament

---
 .../src/com/gameware/game/states/ViewTournamentState.java  | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
index 03093d1..0e145fe 100644
--- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
@@ -68,7 +68,12 @@ public class ViewTournamentState extends State {
             this.tournament = tournament;
         }
 
-        this.round = r;
+        try{
+            this.round = QueryIntermediate.getRoundFromTournament(this.tournament.get_id(), GameWare.getInstance().getPlayer().getId(), this.tournament.getCurrentRound());
+        }catch(IOException e){
+            this.round = r;
+        }
+
         titleLabel.setText(tournament.getName());
         roundDeadline.setText("Round deadline\n"+round.getDeadlineDate().toLocaleString());
 
-- 
GitLab


From 20e742af5a355f51afcba967316d900a9889ae30 Mon Sep 17 00:00:00 2001
From: ivarnm <36505347+ivarnm@users.noreply.github.com>
Date: Sat, 18 Apr 2020 13:08:40 +0200
Subject: [PATCH 05/12] LocalStorage implements ModelInterface

---
 .../gameware/game/models/LocalStorage.java    | 24 ++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/frontend/core/src/com/gameware/game/models/LocalStorage.java b/frontend/core/src/com/gameware/game/models/LocalStorage.java
index 74ddb05..a413fd5 100644
--- a/frontend/core/src/com/gameware/game/models/LocalStorage.java
+++ b/frontend/core/src/com/gameware/game/models/LocalStorage.java
@@ -1,6 +1,8 @@
 package com.gameware.game.models;
 
-public class LocalStorage {
+import com.badlogic.gdx.utils.Json;
+
+public class LocalStorage implements ModelInterface {
     private Player player;
     private Boolean musicOn;
     private Boolean soundEffects;
@@ -31,4 +33,24 @@ public class LocalStorage {
     public Boolean getIncludeFin() {
         return includeFin;
     }
+
+    @Override
+    public void reset() {
+        player = null;
+        musicOn = true; // default value
+        soundEffects = true; // default value
+        includeFin = false; // default value
+    }
+
+    @Override
+    public String report() {
+        Json json = new Json();
+        json.setUsePrototypes(false);
+        return json.toJson(this);
+    }
+
+    @Override
+    public String toString() {
+        return report();
+    }
 }
-- 
GitLab


From e24b0bd2eede4283377cdfabd38a337610cb17b8 Mon Sep 17 00:00:00 2001
From: Turid Cecilie Dahl <turidcd@stud.ntnu.no>
Date: Sat, 18 Apr 2020 13:29:11 +0200
Subject: [PATCH 06/12] Makes QI more of a static class

---
 frontend/core/src/com/gameware/game/QueryIntermediate.java | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/frontend/core/src/com/gameware/game/QueryIntermediate.java b/frontend/core/src/com/gameware/game/QueryIntermediate.java
index 73b50ca..9791163 100644
--- a/frontend/core/src/com/gameware/game/QueryIntermediate.java
+++ b/frontend/core/src/com/gameware/game/QueryIntermediate.java
@@ -31,13 +31,15 @@ import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.TimeZone;
 
-public class QueryIntermediate {
+public final class QueryIntermediate {
     /*
         QueryIntermediate works as connector between frontend and backend. It takes care of all
         communications and requests with backend.
 
      */
 
+    private QueryIntermediate(){}
+
     private static String baseUrl = GameWare.apiBaseUrl;
 
     private static Json json = new Json();
-- 
GitLab


From 784cd6455b2827658ddda8ff72fbc3686c2fcfe8 Mon Sep 17 00:00:00 2001
From: Turid Dahl <turidcd@stud.ntnu.no>
Date: Sun, 19 Apr 2020 10:28:59 +0200
Subject: [PATCH 07/12] #99 back btn violet and play btn green

---
 .../states/CreateJoinTournamentState.java     |  2 +-
 .../game/states/CreateNewTournamentState.java |  8 +++----
 .../game/states/FinishedTournamentState.java  |  2 +-
 .../com/gameware/game/states/LoginState.java  | 23 +++++++++++++++----
 .../com/gameware/game/states/MenuState.java   |  3 ++-
 .../gameware/game/states/OptionsState.java    |  2 +-
 .../states/SinglePlayerSelectGameState.java   |  4 ++--
 .../src/com/gameware/game/states/State.java   | 13 +++++++++++
 .../game/states/TournamentHighScoreState.java |  2 +-
 .../states/ViewHighScoreForGameState.java     |  2 +-
 .../game/states/ViewHighScoreState.java       |  2 +-
 .../game/states/ViewTournamentState.java      |  8 +++----
 12 files changed, 49 insertions(+), 22 deletions(-)

diff --git a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
index 6fe1e43..b82d89c 100644
--- a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
@@ -250,7 +250,7 @@ public class CreateJoinTournamentState extends State {
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
diff --git a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
index cc462f9..5382c44 100644
--- a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
@@ -57,7 +57,7 @@ public class CreateNewTournamentState extends State {
 //    Texts
     private final String backBtnText = "Back";
     private final String createBtnText = "Create";
-    private final String nextBtnText = "Next";
+    private final String nextBtnText = "Select games";
 
     private final String noNameText = "No name given";
     private final String noGamesSelectedText = "No games selected";
@@ -169,7 +169,7 @@ public class CreateNewTournamentState extends State {
         rootTable.add(makeBackBtn()).expand().bottom().left();
 
         TextButton nextBtn = makeNextBtn();
-        rootTable.add(nextBtn).size(buttonWidth, buttonHeight).expand().bottom().right();
+        rootTable.add(nextBtn).size(buttonWidth*1.2f, buttonHeight).expand().bottom().right();
     }
 
     private void makePageTwo(){
@@ -235,7 +235,7 @@ public class CreateNewTournamentState extends State {
     }
 
     private TextButton makeCreateBtn() {
-        TextButton createBtn = new TextButton(createBtnText, skin);
+        TextButton createBtn = new TextButton(createBtnText, makeTextButtonStyle(greenColor));
         createBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
@@ -274,7 +274,7 @@ public class CreateNewTournamentState extends State {
     }
 
     private TextButton makeBackBtn() {
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
diff --git a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java b/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
index 48ccee6..a5f01b8 100644
--- a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
@@ -135,7 +135,7 @@ public class FinishedTournamentState extends State {
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
diff --git a/frontend/core/src/com/gameware/game/states/LoginState.java b/frontend/core/src/com/gameware/game/states/LoginState.java
index 78fc4da..efa7a6b 100644
--- a/frontend/core/src/com/gameware/game/states/LoginState.java
+++ b/frontend/core/src/com/gameware/game/states/LoginState.java
@@ -1,6 +1,8 @@
 package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Input;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.InputListener;
@@ -196,14 +198,11 @@ public class LoginState extends State {
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backText, skin);
+        TextButton backBtn = new TextButton(backText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
-                page --;
-                errorLabel.setText("");
-                stage.clear();
-                makeStage();
+                handleBackBtnClicked();
             }
         });
         return backBtn;
@@ -274,6 +273,13 @@ public class LoginState extends State {
         }
     }
 
+    private void handleBackBtnClicked(){
+        page --;
+        errorLabel.setText("");
+        stage.clear();
+        makeStage();
+    }
+
 //    Adds listener to stage that removes keyboard on touch
     private void removeKeyPadAtTouch(){
         stage.getRoot().addCaptureListener(new InputListener() {
@@ -327,6 +333,13 @@ public class LoginState extends State {
         this.loadingText.setLoading();
     }
 
+    @Override
+    protected void handleInput() {
+        if (Gdx.input.isKeyJustPressed(Input.Keys.BACK) && page == 1){
+            handleBackBtnClicked();
+        }
+    }
+
     @Override
     public void dispose() {
         stage.dispose();
diff --git a/frontend/core/src/com/gameware/game/states/MenuState.java b/frontend/core/src/com/gameware/game/states/MenuState.java
index 69541d1..99d0ed7 100644
--- a/frontend/core/src/com/gameware/game/states/MenuState.java
+++ b/frontend/core/src/com/gameware/game/states/MenuState.java
@@ -2,6 +2,7 @@ package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
@@ -140,7 +141,7 @@ public class MenuState extends State{
         Table table = new Table();
         table.add(new Image(logOut)).width(logOutWidth).height(buttonHeight/3f).spaceRight(spacingLittle/2);
         table.add(new Label(logOutBtnText, skin, "big")).spaceRight(spacingLittle/2);
-        Button btn = new Button(table, skin);
+        Button btn = new Button(table, makeTextButtonStyle(backColor));
         btn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
diff --git a/frontend/core/src/com/gameware/game/states/OptionsState.java b/frontend/core/src/com/gameware/game/states/OptionsState.java
index 1a98dad..0a4071e 100644
--- a/frontend/core/src/com/gameware/game/states/OptionsState.java
+++ b/frontend/core/src/com/gameware/game/states/OptionsState.java
@@ -98,7 +98,7 @@ public class OptionsState extends State {
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
diff --git a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
index 3a22e66..d59a1dd 100644
--- a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
+++ b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
@@ -84,7 +84,7 @@ public class SinglePlayerSelectGameState extends State {
                 innerInnerTable.add(makeRow(new Label(g.getName(), skin), makeDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
                 innerInnerTable.row();
 
-                TextButton gameBtn = new TextButton(playBtnText, skin);
+                TextButton gameBtn = new TextButton(playBtnText, makeTextButtonStyle(greenColor));
                 gameBtn.addListener(new SinglePlayerSelectGameState.MyClickListener(g));
                 innerInnerTable.add(gameBtn);
 
@@ -96,7 +96,7 @@ public class SinglePlayerSelectGameState extends State {
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){ handleBackBtnClick(); }
diff --git a/frontend/core/src/com/gameware/game/states/State.java b/frontend/core/src/com/gameware/game/states/State.java
index a4fdc7d..b743fa6 100644
--- a/frontend/core/src/com/gameware/game/states/State.java
+++ b/frontend/core/src/com/gameware/game/states/State.java
@@ -15,6 +15,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image;
 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 com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
 import com.badlogic.gdx.utils.Align;
@@ -56,6 +57,8 @@ public abstract class State {
     protected TextureRegionDrawable backgroundTableBlueRounded = new TextureRegionDrawable(new TextureRegion(new Texture("state/tableBGRounded.png")));
 
     protected TextureRegionDrawable questionMark = new TextureRegionDrawable(new TextureRegion(new Texture("state/questionMarkIcon.png")));
+    protected Color backColor = Color.VIOLET;
+    protected Color greenColor = Color.GREEN;
 
 //    Sound Effects
     protected Sound buttonPressSound;
@@ -165,4 +168,14 @@ public abstract class State {
         return dialog;
     }
 
+    protected TextButton.TextButtonStyle makeTextButtonStyle(Color background){
+        TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
+        textButtonStyle.up = skin.newDrawable("button", background);
+        textButtonStyle.down = skin.newDrawable("button-down", background);
+        textButtonStyle.font = skin.getFont("font-big");
+        textButtonStyle.fontColor = Color.WHITE;
+        return textButtonStyle;
+    }
+
+
 }
diff --git a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
index ef7d3b4..b53cea0 100644
--- a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
@@ -109,7 +109,7 @@ public class TournamentHighScoreState extends State{
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java b/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
index 1e6d082..3aec47f 100644
--- a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
@@ -96,7 +96,7 @@ public class ViewHighScoreForGameState extends State {
 
 //    Make widgets methods
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java b/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
index 053d3c5..e4bbbea 100644
--- a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
@@ -106,7 +106,7 @@ public class ViewHighScoreState extends State {
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){ handleBackBtnClick(); }
diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
index 0e145fe..74e15c9 100644
--- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
@@ -154,7 +154,7 @@ public class ViewTournamentState extends State {
     }
 
     private TextButton makeBackBtn(){
-        TextButton backBtn = new TextButton(backBtnText, skin);
+        TextButton backBtn = new TextButton(backBtnText, makeTextButtonStyle(backColor));
         backBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
@@ -168,8 +168,8 @@ public class ViewTournamentState extends State {
         TextButton playBtn;
         if(round.isPlayed()){
             TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
-            textButtonStyle.up = skin.newDrawable("button", Color.GRAY);
-            textButtonStyle.down = skin.newDrawable("button", Color.GRAY);
+            textButtonStyle.up = skin.newDrawable("button", new Color(0x207b20a0));
+            textButtonStyle.down = skin.newDrawable("button", new Color(0x207b20a0));
             textButtonStyle.font = skin.getFont("font-big");
             textButtonStyle.fontColor = Color.LIGHT_GRAY;
 
@@ -185,7 +185,7 @@ public class ViewTournamentState extends State {
             });
         }
         else{
-            playBtn = new TextButton(playBtnText, skin);
+            playBtn = new TextButton(playBtnText, makeTextButtonStyle(greenColor));
             playBtn.addListener(new ClickListener() {
                 @Override
                 public void clicked(InputEvent e, float x, float y){
-- 
GitLab


From f62a1fb2bac4d40540342ae69fbf1600f4dbab07 Mon Sep 17 00:00:00 2001
From: Turid Dahl <turidcd@stud.ntnu.no>
Date: Sun, 19 Apr 2020 11:42:55 +0200
Subject: [PATCH 08/12] #98 Adds MenuStateTemplate + cleans

---
 .../core/src/com/gameware/game/GameWare.java  |  14 +-
 .../gameware/game/states/BubbleWrapState.java |   2 +-
 .../gameware/game/states/ColorRushState.java  |   2 +-
 .../states/CreateJoinTournamentState.java     |   4 +-
 .../game/states/CreateNewTournamentState.java |   4 +-
 .../game/states/FinishedTournamentState.java  |   4 +-
 .../game/states/FruitSlicerState.java         |   2 +-
 .../com/gameware/game/states/LoginState.java  |   4 +-
 .../com/gameware/game/states/MenuState.java   |   7 +-
 .../game/states/MenuStateTemplate.java        | 162 ++++++++++++++++++
 .../gameware/game/states/OptionsState.java    |   4 +-
 .../com/gameware/game/states/PauseState.java  |  34 ++--
 ...eComposite.java => PlayStateTemplate.java} | 105 ++++++++----
 .../com/gameware/game/states/ScoreState.java  |   4 +-
 .../states/SinglePlayerSelectGameState.java   |   9 +-
 .../src/com/gameware/game/states/State.java   | 154 ++---------------
 .../game/states/TournamentHighScoreState.java |   4 +-
 .../states/ViewHighScoreForGameState.java     |   4 +-
 .../game/states/ViewTournamentState.java      |  10 +-
 19 files changed, 303 insertions(+), 230 deletions(-)
 create mode 100644 frontend/core/src/com/gameware/game/states/MenuStateTemplate.java
 rename frontend/core/src/com/gameware/game/states/{PlayStateComposite.java => PlayStateTemplate.java} (89%)

diff --git a/frontend/core/src/com/gameware/game/GameWare.java b/frontend/core/src/com/gameware/game/GameWare.java
index 1789271..10918e9 100644
--- a/frontend/core/src/com/gameware/game/GameWare.java
+++ b/frontend/core/src/com/gameware/game/GameWare.java
@@ -16,7 +16,7 @@ import com.gameware.game.models.Player;
 import com.gameware.game.states.GameStateManager;
 import com.gameware.game.states.LoginState;
 import com.gameware.game.states.MenuState;
-import com.gameware.game.states.PlayStateComposite;
+import com.gameware.game.states.PlayStateTemplate;
 
 import java.io.IOException;
 import java.lang.reflect.Constructor;
@@ -44,7 +44,7 @@ public class GameWare extends ApplicationAdapter {
 	private Player player;
 	private List<Game> games = new ArrayList<>();
 
-	private Map<String, PlayStateComposite> gameIdToPlayState = new HashMap<>();
+	private Map<String, PlayStateTemplate> gameIdToPlayState = new HashMap<>();
 
 	//Singleton (lazy initialization)
 	private GameWare(){ }
@@ -60,10 +60,6 @@ public class GameWare extends ApplicationAdapter {
 
 	@Override
 	public void create () {
-		if(instance == null){
-			instance = this;
-		}
-
 		gsm = GameStateManager.getInstance();
 
 		loadGameConfigs();
@@ -121,11 +117,11 @@ public class GameWare extends ApplicationAdapter {
 		return games;
 	}
 
-	public Map<String, PlayStateComposite> getGameIdToPlayState(){
+	public Map<String, PlayStateTemplate> getGameIdToPlayState(){
 		return gameIdToPlayState;
 	}
 
-	public void updateGameMap(String id, PlayStateComposite state){
+	public void updateGameMap(String id, PlayStateTemplate state){
 		gameIdToPlayState.put(id, state);
 	}
 
@@ -201,7 +197,7 @@ public class GameWare extends ApplicationAdapter {
 			try {
 				Class cl = Class.forName(className);
 				Constructor con = cl.getConstructor(GameStateManager.class);
-				PlayStateComposite state = (PlayStateComposite) con.newInstance(gsm);
+				PlayStateTemplate state = (PlayStateTemplate) con.newInstance(gsm);
 				gameIdToPlayState.put(id, state);
 			} catch (Exception e) {
 				e.printStackTrace();
diff --git a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java b/frontend/core/src/com/gameware/game/states/BubbleWrapState.java
index 55b4011..5d449bf 100644
--- a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java
+++ b/frontend/core/src/com/gameware/game/states/BubbleWrapState.java
@@ -7,7 +7,7 @@ import com.gameware.game.sprites.Bubble;
 
 import java.util.ArrayList;
 
-public class BubbleWrapState extends PlayStateComposite {
+public class BubbleWrapState extends PlayStateTemplate {
     private Texture background;
     private Texture unpopped;
     private Texture popped1;
diff --git a/frontend/core/src/com/gameware/game/states/ColorRushState.java b/frontend/core/src/com/gameware/game/states/ColorRushState.java
index 7ffcb15..ee8adc4 100644
--- a/frontend/core/src/com/gameware/game/states/ColorRushState.java
+++ b/frontend/core/src/com/gameware/game/states/ColorRushState.java
@@ -9,7 +9,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-public class ColorRushState extends PlayStateComposite {
+public class ColorRushState extends PlayStateTemplate {
 
     private List<ColorRushTarget> activeTargets;
     private List<ColorRushTarget> previousTargets;
diff --git a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
index b82d89c..27469d9 100644
--- a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
@@ -26,7 +26,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-public class CreateJoinTournamentState extends State {
+public class CreateJoinTournamentState extends MenuStateTemplate {
 
 //    Data
     private List<Tournament> tournaments = new ArrayList<>();
@@ -107,7 +107,7 @@ public class CreateJoinTournamentState extends State {
         }
     }
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = makeRootTable();
 
         titleLabel.setFontScale(titleFontBigScale);
diff --git a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
index 5382c44..e470f42 100644
--- a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
@@ -27,7 +27,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-public class CreateNewTournamentState extends State {
+public class CreateNewTournamentState extends MenuStateTemplate {
 
 //    Data
     private List<Game> games;
@@ -124,7 +124,7 @@ public class CreateNewTournamentState extends State {
         makeStage();
     }
 
-    private void makeStage(){
+    protected void makeStage(){
         rootTable = makeRootTable();
 
         titleLabel.setFontScale(titleFontBigScale);
diff --git a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java b/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
index a5f01b8..8bdd401 100644
--- a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
@@ -18,7 +18,7 @@ import com.gameware.game.models.Tournament;
 import java.util.ArrayList;
 import java.util.List;
 
-public class FinishedTournamentState extends State {
+public class FinishedTournamentState extends MenuStateTemplate {
 
 //    Data
     private Tournament tournament;
@@ -56,7 +56,7 @@ public class FinishedTournamentState extends State {
         makeStage();
     }
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = makeRootTable(backgroundFinTourn);
         rootTable.defaults().spaceBottom(spacingMedium);
 
diff --git a/frontend/core/src/com/gameware/game/states/FruitSlicerState.java b/frontend/core/src/com/gameware/game/states/FruitSlicerState.java
index 575cb23..25e3e86 100644
--- a/frontend/core/src/com/gameware/game/states/FruitSlicerState.java
+++ b/frontend/core/src/com/gameware/game/states/FruitSlicerState.java
@@ -12,7 +12,7 @@ import com.gameware.game.sprites.SlicingCircle;
 import java.util.ArrayList;
 import java.util.List;
 
-public class FruitSlicerState extends PlayStateComposite {
+public class FruitSlicerState extends PlayStateTemplate {
     private int totalFruitsCut = 0;
     private float startingEmitFrequency = 1f;
     private float endingEmitFrequency = 0.2f;
diff --git a/frontend/core/src/com/gameware/game/states/LoginState.java b/frontend/core/src/com/gameware/game/states/LoginState.java
index efa7a6b..1c646a4 100644
--- a/frontend/core/src/com/gameware/game/states/LoginState.java
+++ b/frontend/core/src/com/gameware/game/states/LoginState.java
@@ -19,7 +19,7 @@ import com.gameware.game.sprites.LoadingText;
 import java.io.IOException;
 import java.util.NoSuchElementException;
 
-public class LoginState extends State {
+public class LoginState extends MenuStateTemplate {
 
 //    Labels
     private final Label titleLabel = new Label("GameWare", skin, "big");
@@ -65,7 +65,7 @@ public class LoginState extends State {
         makeStage();
     }
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = super.makeRootTable();
 
 //        Add widgets
diff --git a/frontend/core/src/com/gameware/game/states/MenuState.java b/frontend/core/src/com/gameware/game/states/MenuState.java
index 99d0ed7..c3777c9 100644
--- a/frontend/core/src/com/gameware/game/states/MenuState.java
+++ b/frontend/core/src/com/gameware/game/states/MenuState.java
@@ -16,7 +16,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
 import com.gameware.game.GameWare;
 import com.gameware.game.sprites.LoadingText;
 
-public class MenuState extends State{
+public class MenuState extends MenuStateTemplate{
 
 //    Labels
     private final Label titleLabel = new Label("GameWare", skin, "big");
@@ -45,14 +45,13 @@ public class MenuState extends State{
     private boolean multiBtnClicked = false;
     private LoadingText loadingText = new LoadingText();
 
+
     public MenuState(GameStateManager gsm) {
         super(gsm);
-
         makeStage();
     }
 
-
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = super.makeRootTable();
 
 //        Add widgets
diff --git a/frontend/core/src/com/gameware/game/states/MenuStateTemplate.java b/frontend/core/src/com/gameware/game/states/MenuStateTemplate.java
new file mode 100644
index 0000000..ec31c9f
--- /dev/null
+++ b/frontend/core/src/com/gameware/game/states/MenuStateTemplate.java
@@ -0,0 +1,162 @@
+package com.gameware.game.states;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.audio.Sound;
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.Pixmap;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.scenes.scene2d.InputEvent;
+import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+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.utils.ClickListener;
+import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
+import com.badlogic.gdx.utils.Align;
+import com.gameware.game.GameWare;
+
+public abstract class MenuStateTemplate extends State{
+
+    //    Font
+    protected final float fontScale = 3f;
+    protected final float tinierTitleFontBigScale = 1.5f;
+    protected final float titleFontBigScale = 2.5f;
+
+    //    Spacing
+    protected final float spacingLittle = Gdx.graphics.getHeight()/50;
+    protected final float spacingMedium = Gdx.graphics.getHeight()/15;
+    protected final float spacingLarge = spacingMedium*2;
+
+    //    Padding
+    protected final int rootTablePadding = Gdx.graphics.getWidth()/15;
+    protected final int rootTablePaddingTop = Gdx.graphics.getWidth()/10;
+    protected final int padding = 50;
+
+    //    Width & Height
+    protected final int buttonWidth = Gdx.graphics.getWidth()/3;
+    protected final int buttonHeight = Gdx.graphics.getHeight()/12;
+    protected final float questionMarkWidthAndHeight = Gdx.graphics.getWidth()/25;
+    protected final float imageWidthAndHeigh = Gdx.graphics.getWidth()/4;
+
+    //    Textures
+    protected TextureRegionDrawable background = new TextureRegionDrawable(new TextureRegion(new Texture("state/bg1.jpg")));
+    protected TextureRegionDrawable backgroundScore = new TextureRegionDrawable(new TextureRegion(new Texture("state/bg_score.jpg")));
+    protected TextureRegionDrawable backgroundFinTourn = new TextureRegionDrawable(new TextureRegion(new Texture("state/bg1_finTourn.jpg")));
+    protected TextureRegionDrawable backgroundTableBlueRounded = new TextureRegionDrawable(new TextureRegion(new Texture("state/tableBGRounded.png")));
+
+    protected TextureRegionDrawable questionMark = new TextureRegionDrawable(new TextureRegion(new Texture("state/questionMarkIcon.png")));
+    protected Color backColor = Color.VIOLET;
+    protected Color greenColor = Color.GREEN;
+
+    //    Sound Effects
+    protected Sound checkBoxSound;
+
+
+    public MenuStateTemplate(GameStateManager gsm){
+        super(gsm);
+        skin.getFont("font").getData().setScale(fontScale);
+
+//        Add sound effects
+        this.checkBoxSound = Gdx.audio.newSound(Gdx.files.internal("sfx/check_box.ogg"));
+    }
+
+//    Override Methods
+    @Override
+    protected void handleInput(){}
+
+    @Override
+    public void update(float dt){
+        if(firstTimeRunningUpdate) {
+            Gdx.input.setInputProcessor(stage);
+            Gdx.input.setCatchBackKey(true);
+            firstTimeRunningUpdate = false;
+        }
+        this.handleInput();
+        stage.act(dt);
+    }
+
+    @Override
+    public void render(SpriteBatch sb){
+        stage.draw();
+    }
+
+    @Override
+    public void dispose(){
+        stage.dispose();
+    }
+
+    @Override
+    public void reset(){}
+
+//    Abstract methods
+    protected abstract void makeStage();
+
+
+//    UI methods:
+
+//    Makes default rootTable
+    protected Table makeRootTable(TextureRegionDrawable background){
+        Table rootTable = new Table();
+        rootTable.setFillParent(true);
+        rootTable.setBackground(background);
+        rootTable.pad(rootTablePadding);
+        rootTable.padTop(rootTablePaddingTop);
+        rootTable.defaults().space(spacingLittle);
+        return rootTable;
+    }
+//    Makes default rootTable
+    protected Table makeRootTable(){
+        return makeRootTable(background);
+    }
+
+    protected TextureRegionDrawable makeColorBackground(Color color){
+        Pixmap bgPixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
+        bgPixmap.setColor(color);
+        bgPixmap.fill();
+        return new TextureRegionDrawable(new TextureRegion(new Texture(bgPixmap)));
+    }
+
+//    Dialog methods
+
+    protected Table makeRow(Label label, final Dialog dialog){
+        Table table = new Table();
+        table.add(label).spaceRight(spacingLittle/2);
+        Image questionMarkImage = new Image(questionMark);
+        questionMarkImage.addListener(new ClickListener(){
+            @Override
+            public void clicked(InputEvent e, float x, float y){
+                if(GameWare.getInstance().isSoundEffectsOn()){ checkBoxSound.play(); }
+                dialog.show(stage);
+            }
+        });
+        table.add(questionMarkImage).width(questionMarkWidthAndHeight).height(questionMarkWidthAndHeight).top();
+        return table;
+    }
+
+    protected Dialog makeDialog(Label label){
+        Dialog dialog = new Dialog("", skin, "dialog") {
+            public void result(Object obj) { }
+        };
+
+        label.setAlignment(Align.center);
+        label.setWrap(true);
+        dialog.getContentTable().add(label).width(Gdx.graphics.getWidth()/1.5f).pad(dialog.getHeight()/5f).padBottom(0);
+
+        dialog.button("Okay", true); //sends "true" as the result
+        dialog.getButtonTable().pad(dialog.getHeight()/2f);
+
+        return dialog;
+    }
+
+    protected TextButton.TextButtonStyle makeTextButtonStyle(Color background){
+        TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
+        textButtonStyle.up = skin.newDrawable("button", background);
+        textButtonStyle.down = skin.newDrawable("button-down", background);
+        textButtonStyle.font = skin.getFont("font-big");
+        textButtonStyle.fontColor = Color.WHITE;
+        return textButtonStyle;
+    }
+}
diff --git a/frontend/core/src/com/gameware/game/states/OptionsState.java b/frontend/core/src/com/gameware/game/states/OptionsState.java
index 0a4071e..eb67417 100644
--- a/frontend/core/src/com/gameware/game/states/OptionsState.java
+++ b/frontend/core/src/com/gameware/game/states/OptionsState.java
@@ -11,7 +11,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.badlogic.gdx.utils.Scaling;
 import com.gameware.game.GameWare;
 
-public class OptionsState extends State {
+public class OptionsState extends MenuStateTemplate {
 
 //    Labels
     private final Label titleLabel = new Label("Options", skin, "big");
@@ -31,7 +31,7 @@ public class OptionsState extends State {
         makeStage();
     }
 
-    private void makeStage(){
+    protected void makeStage(){
 //        Make root table
         Table rootTable = super.makeRootTable();
         rootTable.defaults().spaceBottom(spacingMedium).expandY();
diff --git a/frontend/core/src/com/gameware/game/states/PauseState.java b/frontend/core/src/com/gameware/game/states/PauseState.java
index 096c5d5..e178a21 100644
--- a/frontend/core/src/com/gameware/game/states/PauseState.java
+++ b/frontend/core/src/com/gameware/game/states/PauseState.java
@@ -15,25 +15,33 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class PauseState extends State {
-    private ShapeRenderer sr;
-    private List<PauseCircle> pauseCircles;
+
+//    Data
+    private PlayStateTemplate pausedGame;
+
+//    Textures
     private Texture background;
     private Texture pauseText;
     private Texture dimmingTexture;
+    private Texture countdownNumberTexture;
+    private List<Texture> countdownNumbers;
+
+//    Variables
+    private Color originalFontColor;
+    private float countdownDurationLeft;
+    private boolean countdownStarted;
+    private boolean userExited;
+    private boolean needsConfirmation;
+
+//    Widgets
+    private List<PauseCircle> pauseCircles;
     private ConfirmationBox confirmationBox;
     private PauseMenuButton resumeButton;
     private PauseMenuButton exitButton;
-    private boolean needsConfirmation;
-    private PlayStateComposite pausedGame;
     private LoadingText loadingText;
-    private boolean userExited;
-    private Color originalFontColor;
-    private List<Texture> countdownNumbers;
-    private float countdownDurationLeft;
-    private boolean countdownStarted = false;
-    private Texture countdownNumberTexture;
 
-    public PauseState(GameStateManager gsm, PlayStateComposite pausedGame) {
+
+    public PauseState(GameStateManager gsm, PlayStateTemplate pausedGame) {
         super(gsm);
 
         this.background = new Texture(Gdx.files.internal("pause/PauseBackground.jpg"));
@@ -215,7 +223,5 @@ public class PauseState extends State {
     }
 
     @Override
-    public void reset() {
-
-    }
+    public void reset() { }
 }
diff --git a/frontend/core/src/com/gameware/game/states/PlayStateComposite.java b/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
similarity index 89%
rename from frontend/core/src/com/gameware/game/states/PlayStateComposite.java
rename to frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
index dc1ed5f..f616042 100644
--- a/frontend/core/src/com/gameware/game/states/PlayStateComposite.java
+++ b/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
@@ -19,23 +19,32 @@ import java.io.IOException;
 import java.util.List;
 
 
-public abstract class PlayStateComposite extends State {
-    private int score;
+public abstract class PlayStateTemplate extends State {
+
+//    Data
     private Round round = null;
     private Tournament tournament = null;
     private Round updatedRound = null;
     private RoundCheck roundCheck = null;
+
+//    Game values
+    private int score;
+    protected float totalGameTime = 0f;
+    protected float currentDuration = 0f;
+
+//    Game objects
+    protected Texture screenshot = null;
     private PauseButton pauseButton;
     private LoadingText loadingText = new LoadingText();
     private BitmapFont font;
+
+//    Game booleans
     private boolean pauseButtonVisible = true;
     private boolean timeLeftVisible = true;
     private boolean currentScoreVisible = true;
-    protected float totalGameTime = 0f;
-    protected Texture screenshot = null;
-    protected float currentDuration = 0f;
 
-    public PlayStateComposite(GameStateManager gsm){
+
+    public PlayStateTemplate(GameStateManager gsm){
         super(gsm);
 
         // Default pause button (black color)
@@ -47,6 +56,11 @@ public abstract class PlayStateComposite extends State {
         font.getData().setScale((float) (Gdx.graphics.getWidth()/GameWare.WIDTH*1.75));
     }
 
+//    Override methods
+    @Override
+    protected void handleInput(){}
+
+    @Override
     public void update(float dt){
         // Post score and exit if the game is over and the loading text is rendering
         if(this.loadingText.textIsRendering()){
@@ -79,6 +93,7 @@ public abstract class PlayStateComposite extends State {
         }
     }
 
+    @Override
     public void render(SpriteBatch sb){
         this.loadingText.draw(sb);
 
@@ -89,6 +104,17 @@ public abstract class PlayStateComposite extends State {
         this.renderText(sb);
     }
 
+    @Override
+    public void dispose(){
+        this.loadingText.dispose();
+        this.pauseButton.dispose();
+        this.font.dispose();
+    }
+
+    @Override
+    public void reset(){}
+
+
     // Renders the text - This is used by this class' render method as well as by the PauseState
     public void renderText(SpriteBatch sb){
         // Shows the current duration if it's supposed to be visible and the game is time-based
@@ -107,19 +133,13 @@ public abstract class PlayStateComposite extends State {
         }
     }
 
-    public void setGameFinished(){
-        this.loadingText.setLoading();
-    }
-
-    public void setRound(Round r){
-        this.round = r;
-    }
 
-    public void setTournament(Tournament t){
-        this.tournament = t;
-    }
+//    Game done methods:
 
-    public void gameDone(){
+//    When game is done, this method is called and posts the score, ands new instance of the game,
+//    uptades rounds and tournaments if in a tournament and sends back to the correct state.
+//    Remember to use setScore before using this method.
+    protected void gameDone(){
         String id = "";
         //Find the id to the game just played
         for (String key : GameWare.getInstance().getGameIdToPlayState().keySet()){
@@ -136,6 +156,22 @@ public abstract class PlayStateComposite extends State {
             e.printStackTrace();
         }
 
+        goToNextState();
+    }
+
+//    Posts the score
+    private void postScore(String gameId )throws IOException {
+        if(round==null) {
+            QueryIntermediate.postHighscore(GameWare.getInstance().getPlayer().getId(), gameId, this.score);
+        } else{
+            List<ModelInterface> updatedRoundModels = QueryIntermediate.putRoundScore(round.get_id(),tournament.get_id(), this.score);
+            updatedRound = (Round) updatedRoundModels.get(0);
+            roundCheck = (RoundCheck) updatedRoundModels.get(1);
+        }
+    }
+
+//    Go to the correct menu-state to go back to
+    private void goToNextState(){
         if(round == null) {
             //Singleplayer
             gsm.set(new ScoreState(gsm, this.score, new SinglePlayerSelectGameState(gsm)));
@@ -153,23 +189,27 @@ public abstract class PlayStateComposite extends State {
                     e.printStackTrace();
                 }
             } else {
+//                No new round ready
                 gsm.set(new ScoreState(gsm, this.score, new ViewTournamentState(gsm, tournament, updatedRound)));
             }
         }
     }
 
+//    Setters
+    public void setGameFinished(){
+        this.loadingText.setLoading();
+    }
+
     public void setScore(int score){
         this.score = score;
     }
 
-    public void postScore(String gameId )throws IOException {
-        if(round==null) {
-            QueryIntermediate.postHighscore(GameWare.getInstance().getPlayer().getId(), gameId, this.score);
-        } else{
-            List<ModelInterface> updatedRoundModels = QueryIntermediate.putRoundScore(round.get_id(),tournament.get_id(), this.score);
-            updatedRound = (Round) updatedRoundModels.get(0);
-            roundCheck = (RoundCheck) updatedRoundModels.get(1);
-        }
+    public void setRound(Round r){
+        this.round = r;
+    }
+
+    public void setTournament(Tournament t){
+        this.tournament = t;
     }
 
     // Changes the color of the pause button to white
@@ -194,10 +234,6 @@ public abstract class PlayStateComposite extends State {
         this.font.setColor(color);
     }
 
-    public Color getFontColor(){
-        return this.font.getColor();
-    }
-
     public void setTotalGameTime(float totalGameTime){
         this.totalGameTime = totalGameTime;
     }
@@ -206,6 +242,11 @@ public abstract class PlayStateComposite extends State {
         this.currentDuration = currentDuration;
     }
 
+//    Getters
+    public Color getFontColor(){
+    return this.font.getColor();
+}
+
     public float getCurrentDuration(){
         return this.currentDuration;
     }
@@ -214,6 +255,7 @@ public abstract class PlayStateComposite extends State {
         return this.totalGameTime;
     }
 
+//    Hide and show methods:
     public void hidePauseButton(){
         this.pauseButtonVisible = false;
     }
@@ -238,10 +280,5 @@ public abstract class PlayStateComposite extends State {
         this.currentScoreVisible = true;
     }
 
-    public void dispose(){
-        this.loadingText.dispose();
-        this.pauseButton.dispose();
-        this.font.dispose();
-    }
 }
 
diff --git a/frontend/core/src/com/gameware/game/states/ScoreState.java b/frontend/core/src/com/gameware/game/states/ScoreState.java
index 34e9a08..bf1c608 100644
--- a/frontend/core/src/com/gameware/game/states/ScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/ScoreState.java
@@ -11,7 +11,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.utils.Align;
 import com.gameware.game.GameWare;
 
-public class ScoreState extends State {
+public class ScoreState extends MenuStateTemplate {
 
 //    Data
     private State nextState;
@@ -41,7 +41,7 @@ public class ScoreState extends State {
     }
 
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = makeRootTable(backgroundScore);
 
         titleLabel.setFontScale(titleFontBigScale);
diff --git a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
index d59a1dd..ecc2f9a 100644
--- a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
+++ b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
@@ -17,11 +17,12 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-public class SinglePlayerSelectGameState extends State {
+public class SinglePlayerSelectGameState extends MenuStateTemplate {
 
 //    Data
     private List<Game> games = new ArrayList<>();
 
+//    Texts
     private final String backBtnText = "Back";
     private final String playBtnText = "Play!";
 
@@ -35,7 +36,7 @@ public class SinglePlayerSelectGameState extends State {
     private final float scrollPaneHeight = Gdx.graphics.getHeight()/2.3f;
 
 
-    protected SinglePlayerSelectGameState(GameStateManager gsm) {
+    public SinglePlayerSelectGameState(GameStateManager gsm) {
         super(gsm);
         try {
             games = GameWare.getInstance().getGames();
@@ -46,7 +47,7 @@ public class SinglePlayerSelectGameState extends State {
         makeStage();
     }
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = makeRootTable();
 
         titleLabel.setFontScale(titleFontBigScale);
@@ -123,7 +124,7 @@ public class SinglePlayerSelectGameState extends State {
 
         @Override
         public void clicked(InputEvent event, float x, float y) {
-            Map<String, PlayStateComposite> map = GameWare.getInstance().getGameIdToPlayState();
+            Map<String, PlayStateTemplate> map = GameWare.getInstance().getGameIdToPlayState();
             State s = map.get(game.getId());
             handleGameBtnClick(s);
         };
diff --git a/frontend/core/src/com/gameware/game/states/State.java b/frontend/core/src/com/gameware/game/states/State.java
index b743fa6..3839631 100644
--- a/frontend/core/src/com/gameware/game/states/State.java
+++ b/frontend/core/src/com/gameware/game/states/State.java
@@ -2,26 +2,15 @@ package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
-import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.OrthographicCamera;
-import com.badlogic.gdx.graphics.Pixmap;
-import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.Stage;
-import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
-import com.badlogic.gdx.scenes.scene2d.ui.Image;
-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 com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
-import com.badlogic.gdx.utils.Align;
 import com.gameware.game.GameWare;
 
-public abstract class State {
+public abstract class State{
+
+//    Common variables between MenuStateTemplate and PlayStateTemplate
 
 //    Data
     protected GameStateManager gsm;
@@ -29,52 +18,21 @@ public abstract class State {
     protected final OrthographicCamera cam = new OrthographicCamera();
     protected final Skin skin = new Skin(Gdx.files.internal(GameWare.skinFilePath));
 
-//    Font
-    protected final float fontScale = 3f;
-    protected final float tinierTitleFontBigScale = 1.5f;
-    protected final float titleFontBigScale = 2.5f;
-
-//    Spacing
-    protected final float spacingLittle = Gdx.graphics.getHeight()/50;
-    protected final float spacingMedium = Gdx.graphics.getHeight()/15;
-    protected final float spacingLarge = spacingMedium*2;
-
-//    Padding
-    protected final int rootTablePadding = Gdx.graphics.getWidth()/15;
-    protected final int rootTablePaddingTop = Gdx.graphics.getWidth()/10;
-    protected final int padding = 50;
-
-//    Width & Height
-    protected final int buttonWidth = Gdx.graphics.getWidth()/3;
-    protected final int buttonHeight = Gdx.graphics.getHeight()/12;
-    protected final float questionMarkWidthAndHeight = Gdx.graphics.getWidth()/25;
-    protected final float imageWidthAndHeigh = Gdx.graphics.getWidth()/4;
-
-//    Textures
-    protected TextureRegionDrawable background = new TextureRegionDrawable(new TextureRegion(new Texture("state/bg1.jpg")));
-    protected TextureRegionDrawable backgroundScore = new TextureRegionDrawable(new TextureRegion(new Texture("state/bg_score.jpg")));
-    protected TextureRegionDrawable backgroundFinTourn = new TextureRegionDrawable(new TextureRegion(new Texture("state/bg1_finTourn.jpg")));
-    protected TextureRegionDrawable backgroundTableBlueRounded = new TextureRegionDrawable(new TextureRegion(new Texture("state/tableBGRounded.png")));
-
-    protected TextureRegionDrawable questionMark = new TextureRegionDrawable(new TextureRegion(new Texture("state/questionMarkIcon.png")));
-    protected Color backColor = Color.VIOLET;
-    protected Color greenColor = Color.GREEN;
-
-//    Sound Effects
+//    Sound effects
     protected Sound buttonPressSound;
-    protected Sound checkBoxSound;
     protected Sound pauseResumeBtnSound;
     protected Sound pauseStateBtnSound;
 
 //    Variables
-    private boolean firstTimeRunningUpdate = true;
+    protected boolean firstTimeRunningUpdate = true;
+
 
     protected State(GameStateManager gsm){
         this.gsm = gsm;
         cam.setToOrtho(false, Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);
-        skin.getFont("font").getData().setScale(fontScale);
+
+//        Add sound effects
         this.buttonPressSound = Gdx.audio.newSound(Gdx.files.internal("sfx/button_press.ogg"));
-        this.checkBoxSound = Gdx.audio.newSound(Gdx.files.internal("sfx/check_box.ogg"));
         this.pauseResumeBtnSound = Gdx.audio.newSound(Gdx.files.internal("sfx/pause_button.ogg"));
         this.pauseStateBtnSound = Gdx.audio.newSound(Gdx.files.internal("sfx/small_click.ogg"));
 
@@ -83,99 +41,13 @@ public abstract class State {
 
 
 //    State methods
-    protected void handleInput(){ }
-
-    public void update(float dt){
-        if(firstTimeRunningUpdate) {
-            Gdx.input.setInputProcessor(stage);
-            Gdx.input.setCatchBackKey(true);
-            firstTimeRunningUpdate = false;
-        }
-        this.handleInput();
-        stage.act(dt);
-    }
-
-    public void render(SpriteBatch sb){
-        stage.draw();
-    }
-
-    public void dispose(){
-        stage.dispose();
-    }
-
-    public void reset(){}
-
-
-//    Other methods:
-
-//    Makes default rootTable
-    protected Table makeRootTable(){
-        Table rootTable = new Table();
-        rootTable.setFillParent(true);
-        rootTable.setBackground(background);
-        rootTable.pad(rootTablePadding);
-        rootTable.padTop(rootTablePaddingTop);
-        rootTable.defaults().space(spacingLittle);
-        return rootTable;
-    }
-
-    protected Table makeRootTable(TextureRegionDrawable background){
-        Table rootTable = new Table();
-        rootTable.setFillParent(true);
-        rootTable.setBackground(background);
-        rootTable.pad(rootTablePadding);
-        rootTable.padTop(rootTablePaddingTop);
-        rootTable.defaults().space(spacingLittle);
-        return rootTable;
-    }
-
-    protected TextureRegionDrawable makeColorBackground(Color color){
-        Pixmap bgPixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
-        bgPixmap.setColor(color);
-        bgPixmap.fill();
-        return new TextureRegionDrawable(new TextureRegion(new Texture(bgPixmap)));
-    }
-
-//    Dialog methods
-
-    protected Table makeRow(Label label, final Dialog dialog){
-        Table table = new Table();
-        table.add(label).spaceRight(spacingLittle/2);
-        Image questionMarkImage = new Image(questionMark);
-        questionMarkImage.addListener(new ClickListener(){
-            @Override
-            public void clicked(InputEvent e, float x, float y){
-                if(GameWare.getInstance().isSoundEffectsOn()){ checkBoxSound.play(); }
-                dialog.show(stage);
-            }
-        });
-        table.add(questionMarkImage).width(questionMarkWidthAndHeight).height(questionMarkWidthAndHeight).top();
-        return table;
-    }
-
-    protected Dialog makeDialog(Label label){
-        Dialog dialog = new Dialog("", skin, "dialog") {
-            public void result(Object obj) { }
-        };
-
-        label.setAlignment(Align.center);
-        label.setWrap(true);
-        dialog.getContentTable().add(label).width(Gdx.graphics.getWidth()/1.5f).pad(dialog.getHeight()/5f).padBottom(0);
+    protected abstract void handleInput();
 
-        dialog.button("Okay", true); //sends "true" as the result
-        dialog.getButtonTable().pad(dialog.getHeight()/2f);
+    public abstract void update(float dt);
 
-        return dialog;
-    }
-
-    protected TextButton.TextButtonStyle makeTextButtonStyle(Color background){
-        TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
-        textButtonStyle.up = skin.newDrawable("button", background);
-        textButtonStyle.down = skin.newDrawable("button-down", background);
-        textButtonStyle.font = skin.getFont("font-big");
-        textButtonStyle.fontColor = Color.WHITE;
-        return textButtonStyle;
-    }
+    public abstract void render(SpriteBatch sb);
 
+    public abstract void dispose();
 
+    public abstract void reset();
 }
diff --git a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
index b53cea0..3f70f87 100644
--- a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
@@ -18,7 +18,7 @@ import com.gameware.game.models.Tournament;
 import java.util.ArrayList;
 import java.util.List;
 
-public class TournamentHighScoreState extends State{
+public class TournamentHighScoreState extends MenuStateTemplate{
 
 //    Data
     private Tournament tournament;
@@ -61,7 +61,7 @@ public class TournamentHighScoreState extends State{
         makeStage();
     }
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = makeRootTable();
         rootTable.defaults().expandY();
 
diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java b/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
index 3aec47f..4829afd 100644
--- a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
@@ -18,7 +18,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.NoSuchElementException;
 
-public class ViewHighScoreForGameState extends State {
+public class ViewHighScoreForGameState extends MenuStateTemplate {
 
 //    Data
     private String playerId = GameWare.getInstance().getPlayer().getId();
@@ -64,7 +64,7 @@ public class ViewHighScoreForGameState extends State {
         makeStage();
     }
 
-    private void makeStage() {
+    protected void makeStage() {
         Table rootTable = super.makeRootTable();
         rootTable.defaults().expandY();
 
diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
index 74e15c9..be43310 100644
--- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
@@ -24,7 +24,7 @@ import com.gameware.game.sprites.LoadingText;
 import java.io.IOException;
 import java.util.List;
 
-public class ViewTournamentState extends State {
+public class ViewTournamentState extends MenuStateTemplate {
 
 //    Data
     private Tournament tournament;
@@ -92,7 +92,7 @@ public class ViewTournamentState extends State {
     }
 
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = makeRootTable();
 
         titleLabel.setFontScale(titleFontBigScale);
@@ -108,7 +108,7 @@ public class ViewTournamentState extends State {
         currentRoundTable.pad(padding);
         currentRoundTable.setBackground(backgroundTableBlueRounded);
         currentRoundTable.add(new Label("This round:\n\n"+gameName,skin)).space(spacingLittle);
-        PlayStateComposite state = GameWare.getInstance().getGameIdToPlayState().get(round.getGameId());
+        PlayStateTemplate state = GameWare.getInstance().getGameIdToPlayState().get(round.getGameId());
         currentRoundTable.add(new Image(state.screenshot)).width(imageWidthAndHeigh).height(imageWidthAndHeigh).spaceBottom(spacingMedium).colspan(2);
         rootTable.add(currentRoundTable).maxHeight(Gdx.graphics.getHeight()/5).colspan(2);
         rootTable.row();
@@ -262,7 +262,7 @@ public class ViewTournamentState extends State {
             state.setFeedbackLabelText(state.leftTournamentText+tournament.getName());
             gsm.set(state);
         } catch(Exception e){
-            System.out.println(e);
+            e.printStackTrace();
         }
     }
 
@@ -273,7 +273,7 @@ public class ViewTournamentState extends State {
 
     private void handlePlayBtnClick(){
         if(GameWare.getInstance().isSoundEffectsOn()){ buttonPressSound.play(); }
-        PlayStateComposite state = GameWare.getInstance().getGameIdToPlayState().get(round.getGameId());
+        PlayStateTemplate state = GameWare.getInstance().getGameIdToPlayState().get(round.getGameId());
         state.setTournament(tournament);
         state.setRound(round);
         gsm.set(state);
-- 
GitLab


From 6886c8b223695864a2d3907bbe558766a514642d Mon Sep 17 00:00:00 2001
From: Turid Dahl <turidcd@stud.ntnu.no>
Date: Sun, 19 Apr 2020 12:19:04 +0200
Subject: [PATCH 09/12] #98 Adds package game_states

---
 .../core/src/com/gameware/game/GameWare.java  |  2 +-
 .../game/states/CreateNewTournamentState.java | 24 +++++++++----------
 .../game/states/MenuStateTemplate.java        |  5 ++--
 .../gameware/game/states/OptionsState.java    |  3 ++-
 .../com/gameware/game/states/PauseState.java  |  2 +-
 .../states/SinglePlayerSelectGameState.java   |  5 ++--
 .../src/com/gameware/game/states/State.java   |  2 +-
 .../game/states/TournamentHighScoreState.java |  9 ++++---
 .../game/states/ViewHighScoreState.java       | 11 ++++-----
 .../game/states/ViewTournamentState.java      |  3 ++-
 .../{ => game_states}/BubbleWrapState.java    |  3 ++-
 .../{ => game_states}/ColorRushState.java     |  3 ++-
 .../{ => game_states}/FruitSlicerState.java   |  3 ++-
 .../{ => game_states}/PlayStateTemplate.java  | 15 ++++++++++--
 14 files changed, 53 insertions(+), 37 deletions(-)
 rename frontend/core/src/com/gameware/game/states/{ => game_states}/BubbleWrapState.java (97%)
 rename frontend/core/src/com/gameware/game/states/{ => game_states}/ColorRushState.java (99%)
 rename frontend/core/src/com/gameware/game/states/{ => game_states}/FruitSlicerState.java (98%)
 rename frontend/core/src/com/gameware/game/states/{ => game_states}/PlayStateTemplate.java (94%)

diff --git a/frontend/core/src/com/gameware/game/GameWare.java b/frontend/core/src/com/gameware/game/GameWare.java
index 10918e9..a6648d8 100644
--- a/frontend/core/src/com/gameware/game/GameWare.java
+++ b/frontend/core/src/com/gameware/game/GameWare.java
@@ -16,7 +16,7 @@ import com.gameware.game.models.Player;
 import com.gameware.game.states.GameStateManager;
 import com.gameware.game.states.LoginState;
 import com.gameware.game.states.MenuState;
-import com.gameware.game.states.PlayStateTemplate;
+import com.gameware.game.states.game_states.PlayStateTemplate;
 
 import java.io.IOException;
 import java.lang.reflect.Constructor;
diff --git a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
index e470f42..0d347a7 100644
--- a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
@@ -115,11 +115,11 @@ public class CreateNewTournamentState extends MenuStateTemplate {
         roundsPerGameSelectBox.setItems(1,2,3);
         startDelaySelectBox.setItems(1,2,3);
 
-        nameDialog = makeDialog(nameLabelQuestion);
-        timePerRoundDialog = makeDialog(timePerRoundLabelQuestion);
-        maxPlayersDialog = makeDialog(maxPlayersLabelQuestion);
-        roundsPerGameDialog = makeDialog(roundsPerGameLabelQuestion);
-        startDelayDialog = makeDialog(startDelayLabelQuestion);
+        nameDialog = makeQuestionIconDialog(nameLabelQuestion);
+        timePerRoundDialog = makeQuestionIconDialog(timePerRoundLabelQuestion);
+        maxPlayersDialog = makeQuestionIconDialog(maxPlayersLabelQuestion);
+        roundsPerGameDialog = makeQuestionIconDialog(roundsPerGameLabelQuestion);
+        startDelayDialog = makeQuestionIconDialog(startDelayLabelQuestion);
 
         makeStage();
     }
@@ -146,21 +146,21 @@ public class CreateNewTournamentState extends MenuStateTemplate {
         innerTable.pad(spacingLittle);
         innerTable.setBackground(backgroundTableBlueRounded);
 
-        innerTable.add(makeRow(nameLabel, nameDialog));
+        innerTable.add(makeTableWithLabelAndQuestionIcon(nameLabel, nameDialog));
         nameInputField.setMaxLength(9);
         innerTable.add(nameInputField).size(nameFieldWidth, inputFieldHeight);
         innerTable.row();
         removeKeyPadAtTouch();
-        innerTable.add(makeRow(timePerRoundLabel, timePerRoundDialog));
+        innerTable.add(makeTableWithLabelAndQuestionIcon(timePerRoundLabel, timePerRoundDialog));
         innerTable.add(timePerRoundSelectBox);
         innerTable.row();
-        innerTable.add(makeRow(maxPlayersLabel, maxPlayersDialog));
+        innerTable.add(makeTableWithLabelAndQuestionIcon(maxPlayersLabel, maxPlayersDialog));
         innerTable.add(maxPlayersSelectBox);
         innerTable.row();
-        innerTable.add(makeRow(roundsPerGameLabel, roundsPerGameDialog));
+        innerTable.add(makeTableWithLabelAndQuestionIcon(roundsPerGameLabel, roundsPerGameDialog));
         innerTable.add(roundsPerGameSelectBox);
         innerTable.row();
-        innerTable.add(makeRow(startDelayLabel, startDelayDialog));
+        innerTable.add(makeTableWithLabelAndQuestionIcon(startDelayLabel, startDelayDialog));
         innerTable.add(startDelaySelectBox);
         rootTable.add(innerTable).colspan(2);
         rootTable.row();
@@ -186,11 +186,11 @@ public class CreateNewTournamentState extends MenuStateTemplate {
                 continue;
             }
 
-            innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).screenshot)).width(imageWidthAndHeigh).height(imageWidthAndHeigh);
+            innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh);
 
             Table innerInnerTable = new Table();
             innerInnerTable.defaults().space(spacingLittle);
-            innerInnerTable.add(makeRow(new Label(g.getName(), skin), makeDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
+            innerInnerTable.add(makeTableWithLabelAndQuestionIcon(new Label(g.getName(), skin), makeQuestionIconDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
             innerInnerTable.row();
 
             CheckBox gameCB = new CheckBox("",skin);
diff --git a/frontend/core/src/com/gameware/game/states/MenuStateTemplate.java b/frontend/core/src/com/gameware/game/states/MenuStateTemplate.java
index ec31c9f..80700b7 100644
--- a/frontend/core/src/com/gameware/game/states/MenuStateTemplate.java
+++ b/frontend/core/src/com/gameware/game/states/MenuStateTemplate.java
@@ -70,6 +70,7 @@ public abstract class MenuStateTemplate extends State{
     @Override
     public void update(float dt){
         if(firstTimeRunningUpdate) {
+//            First time running update change input processor. Or else it won't work when states are stacked in the gsm
             Gdx.input.setInputProcessor(stage);
             Gdx.input.setCatchBackKey(true);
             firstTimeRunningUpdate = false;
@@ -121,7 +122,7 @@ public abstract class MenuStateTemplate extends State{
 
 //    Dialog methods
 
-    protected Table makeRow(Label label, final Dialog dialog){
+    protected Table makeTableWithLabelAndQuestionIcon(Label label, final Dialog dialog){
         Table table = new Table();
         table.add(label).spaceRight(spacingLittle/2);
         Image questionMarkImage = new Image(questionMark);
@@ -136,7 +137,7 @@ public abstract class MenuStateTemplate extends State{
         return table;
     }
 
-    protected Dialog makeDialog(Label label){
+    protected Dialog makeQuestionIconDialog(Label label){
         Dialog dialog = new Dialog("", skin, "dialog") {
             public void result(Object obj) { }
         };
diff --git a/frontend/core/src/com/gameware/game/states/OptionsState.java b/frontend/core/src/com/gameware/game/states/OptionsState.java
index eb67417..eb13b34 100644
--- a/frontend/core/src/com/gameware/game/states/OptionsState.java
+++ b/frontend/core/src/com/gameware/game/states/OptionsState.java
@@ -11,6 +11,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.badlogic.gdx.utils.Scaling;
 import com.gameware.game.GameWare;
 
+
 public class OptionsState extends MenuStateTemplate {
 
 //    Labels
@@ -27,7 +28,7 @@ public class OptionsState extends MenuStateTemplate {
 
     public OptionsState(GameStateManager gsm) {
         super(gsm);
-        stage.clear();
+
         makeStage();
     }
 
diff --git a/frontend/core/src/com/gameware/game/states/PauseState.java b/frontend/core/src/com/gameware/game/states/PauseState.java
index e178a21..767d260 100644
--- a/frontend/core/src/com/gameware/game/states/PauseState.java
+++ b/frontend/core/src/com/gameware/game/states/PauseState.java
@@ -4,12 +4,12 @@ import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
 import com.gameware.game.GameWare;
 import com.gameware.game.sprites.ConfirmationBox;
 import com.gameware.game.sprites.LoadingText;
 import com.gameware.game.sprites.PauseCircle;
 import com.gameware.game.sprites.PauseMenuButton;
+import com.gameware.game.states.game_states.PlayStateTemplate;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
index ecc2f9a..cddb5af 100644
--- a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
+++ b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
@@ -11,6 +11,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.gameware.game.GameWare;
 import com.gameware.game.models.Game;
+import com.gameware.game.states.game_states.PlayStateTemplate;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -79,10 +80,10 @@ public class SinglePlayerSelectGameState extends MenuStateTemplate {
                 if(GameWare.getInstance().getGameIdToPlayState().get(g.getId()) == null){
                     continue;
                 }
-                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).screenshot)).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
+                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
 
                 Table innerInnerTable = new Table();
-                innerInnerTable.add(makeRow(new Label(g.getName(), skin), makeDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
+                innerInnerTable.add(makeTableWithLabelAndQuestionIcon(new Label(g.getName(), skin), makeQuestionIconDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
                 innerInnerTable.row();
 
                 TextButton gameBtn = new TextButton(playBtnText, makeTextButtonStyle(greenColor));
diff --git a/frontend/core/src/com/gameware/game/states/State.java b/frontend/core/src/com/gameware/game/states/State.java
index 3839631..8a7a363 100644
--- a/frontend/core/src/com/gameware/game/states/State.java
+++ b/frontend/core/src/com/gameware/game/states/State.java
@@ -40,7 +40,7 @@ public abstract class State{
     }
 
 
-//    State methods
+//    Abstract state methods
     protected abstract void handleInput();
 
     public abstract void update(float dt);
diff --git a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
index 3f70f87..2ff5fc0 100644
--- a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
@@ -2,7 +2,6 @@ package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
-import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
 import com.badlogic.gdx.scenes.scene2d.ui.Label;
@@ -55,8 +54,8 @@ public class TournamentHighScoreState extends MenuStateTemplate{
             e.printStackTrace();
         }
 
-        totalDialog = makeDialog(totalDialogLabel);
-        lastRoundDialog = makeDialog(lastRoundLabel);
+        totalDialog = makeQuestionIconDialog(totalDialogLabel);
+        lastRoundDialog = makeQuestionIconDialog(lastRoundLabel);
 
         makeStage();
     }
@@ -95,8 +94,8 @@ public class TournamentHighScoreState extends MenuStateTemplate{
         innerTable.setBackground(backgroundTableBlueRounded);
 
         innerTable.add(colOneLabel).top();
-        innerTable.add(makeRow(colTwoLabel,totalDialog)).top();
-        innerTable.add(makeRow(colThreeLabel,lastRoundDialog)).top();
+        innerTable.add(makeTableWithLabelAndQuestionIcon(colTwoLabel,totalDialog)).top();
+        innerTable.add(makeTableWithLabelAndQuestionIcon(colThreeLabel,lastRoundDialog)).top();
         innerTable.row();
 
         for(Point point : points){
diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java b/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
index e4bbbea..0439b88 100644
--- a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
@@ -2,7 +2,6 @@ package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
-import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 
@@ -21,7 +20,7 @@ import com.gameware.game.sprites.LoadingText;
 
 import java.io.IOException;
 
-public class ViewHighScoreState extends State {
+public class ViewHighScoreState extends MenuStateTemplate {
 
 //    Data
     private List<Game> games = new ArrayList<>();
@@ -33,7 +32,7 @@ public class ViewHighScoreState extends State {
 
 //    Texts
     private final String backBtnText = "Back";
-    private final String BtnText = "View High Score!";
+    private final String BtnText = "View High Score";
 
 //    Values
     private final float scrollPaneWidth = Gdx.graphics.getWidth()/1.15f;
@@ -58,7 +57,7 @@ public class ViewHighScoreState extends State {
         makeStage();
     }
 
-    private void makeStage(){
+    protected void makeStage(){
         Table rootTable = super.makeRootTable();
 
         titleLabel.setFontScale(titleFontBigScale);
@@ -88,10 +87,10 @@ public class ViewHighScoreState extends State {
                 if(GameWare.getInstance().getGameIdToPlayState().get(g.getId()) == null){
                     continue;
                 }
-                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).screenshot)).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
+                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
 
                 Table innerInnerTable = new Table();
-                innerInnerTable.add(makeRow(new Label(g.getName(), skin), makeDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
+                innerInnerTable.add(makeTableWithLabelAndQuestionIcon(new Label(g.getName(), skin), makeQuestionIconDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
                 innerInnerTable.row();
 
                 TextButton gameBtn = new TextButton(BtnText, skin);
diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
index be43310..e77a8f2 100644
--- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
@@ -20,6 +20,7 @@ import com.gameware.game.models.Game;
 import com.gameware.game.models.Round;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
+import com.gameware.game.states.game_states.PlayStateTemplate;
 
 import java.io.IOException;
 import java.util.List;
@@ -109,7 +110,7 @@ public class ViewTournamentState extends MenuStateTemplate {
         currentRoundTable.setBackground(backgroundTableBlueRounded);
         currentRoundTable.add(new Label("This round:\n\n"+gameName,skin)).space(spacingLittle);
         PlayStateTemplate state = GameWare.getInstance().getGameIdToPlayState().get(round.getGameId());
-        currentRoundTable.add(new Image(state.screenshot)).width(imageWidthAndHeigh).height(imageWidthAndHeigh).spaceBottom(spacingMedium).colspan(2);
+        currentRoundTable.add(new Image(state.getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).spaceBottom(spacingMedium).colspan(2);
         rootTable.add(currentRoundTable).maxHeight(Gdx.graphics.getHeight()/5).colspan(2);
         rootTable.row();
 
diff --git a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java b/frontend/core/src/com/gameware/game/states/game_states/BubbleWrapState.java
similarity index 97%
rename from frontend/core/src/com/gameware/game/states/BubbleWrapState.java
rename to frontend/core/src/com/gameware/game/states/game_states/BubbleWrapState.java
index 5d449bf..0a1fffa 100644
--- a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java
+++ b/frontend/core/src/com/gameware/game/states/game_states/BubbleWrapState.java
@@ -1,9 +1,10 @@
-package com.gameware.game.states;
+package com.gameware.game.states.game_states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.gameware.game.sprites.Bubble;
+import com.gameware.game.states.GameStateManager;
 
 import java.util.ArrayList;
 
diff --git a/frontend/core/src/com/gameware/game/states/ColorRushState.java b/frontend/core/src/com/gameware/game/states/game_states/ColorRushState.java
similarity index 99%
rename from frontend/core/src/com/gameware/game/states/ColorRushState.java
rename to frontend/core/src/com/gameware/game/states/game_states/ColorRushState.java
index ee8adc4..12d8bfe 100644
--- a/frontend/core/src/com/gameware/game/states/ColorRushState.java
+++ b/frontend/core/src/com/gameware/game/states/game_states/ColorRushState.java
@@ -1,9 +1,10 @@
-package com.gameware.game.states;
+package com.gameware.game.states.game_states;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.gameware.game.sprites.ColorRushButton;
 import com.gameware.game.sprites.ColorRushTarget;
+import com.gameware.game.states.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/frontend/core/src/com/gameware/game/states/FruitSlicerState.java b/frontend/core/src/com/gameware/game/states/game_states/FruitSlicerState.java
similarity index 98%
rename from frontend/core/src/com/gameware/game/states/FruitSlicerState.java
rename to frontend/core/src/com/gameware/game/states/game_states/FruitSlicerState.java
index 25e3e86..6c805a9 100644
--- a/frontend/core/src/com/gameware/game/states/FruitSlicerState.java
+++ b/frontend/core/src/com/gameware/game/states/game_states/FruitSlicerState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.game_states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
@@ -8,6 +8,7 @@ import com.badlogic.gdx.math.Vector3;
 import com.gameware.game.GameWare;
 import com.gameware.game.sprites.Fruit;
 import com.gameware.game.sprites.SlicingCircle;
+import com.gameware.game.states.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java b/frontend/core/src/com/gameware/game/states/game_states/PlayStateTemplate.java
similarity index 94%
rename from frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
rename to frontend/core/src/com/gameware/game/states/game_states/PlayStateTemplate.java
index f616042..6408670 100644
--- a/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
+++ b/frontend/core/src/com/gameware/game/states/game_states/PlayStateTemplate.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.game_states;
 
 
 import com.badlogic.gdx.Gdx;
@@ -14,6 +14,13 @@ import com.gameware.game.models.RoundCheck;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
 import com.gameware.game.sprites.PauseButton;
+import com.gameware.game.states.FinishedTournamentState;
+import com.gameware.game.states.GameStateManager;
+import com.gameware.game.states.PauseState;
+import com.gameware.game.states.ScoreState;
+import com.gameware.game.states.SinglePlayerSelectGameState;
+import com.gameware.game.states.State;
+import com.gameware.game.states.ViewTournamentState;
 
 import java.io.IOException;
 import java.util.List;
@@ -139,7 +146,7 @@ public abstract class PlayStateTemplate extends State {
 //    When game is done, this method is called and posts the score, ands new instance of the game,
 //    uptades rounds and tournaments if in a tournament and sends back to the correct state.
 //    Remember to use setScore before using this method.
-    protected void gameDone(){
+    public void gameDone(){
         String id = "";
         //Find the id to the game just played
         for (String key : GameWare.getInstance().getGameIdToPlayState().keySet()){
@@ -255,6 +262,10 @@ public abstract class PlayStateTemplate extends State {
         return this.totalGameTime;
     }
 
+    public Texture getScreenshot(){
+        return screenshot;
+    }
+
 //    Hide and show methods:
     public void hidePauseButton(){
         this.pauseButtonVisible = false;
-- 
GitLab


From 1b9cc4606005f9703c02447d8aa10c4614b11c53 Mon Sep 17 00:00:00 2001
From: Turid Dahl <turidcd@stud.ntnu.no>
Date: Sun, 19 Apr 2020 12:47:54 +0200
Subject: [PATCH 10/12] #98 Removes game_states folder, because crashed with
 localStorage and couldn't find games

---
 frontend/core/src/com/gameware/game/GameWare.java              | 2 +-
 .../game/states/{game_states => }/BubbleWrapState.java         | 3 +--
 .../gameware/game/states/{game_states => }/ColorRushState.java | 3 +--
 .../game/states/{game_states => }/FruitSlicerState.java        | 3 +--
 frontend/core/src/com/gameware/game/states/PauseState.java     | 1 -
 .../game/states/{game_states => }/PlayStateTemplate.java       | 2 +-
 .../com/gameware/game/states/SinglePlayerSelectGameState.java  | 1 -
 .../core/src/com/gameware/game/states/ViewTournamentState.java | 1 -
 8 files changed, 5 insertions(+), 11 deletions(-)
 rename frontend/core/src/com/gameware/game/states/{game_states => }/BubbleWrapState.java (97%)
 rename frontend/core/src/com/gameware/game/states/{game_states => }/ColorRushState.java (99%)
 rename frontend/core/src/com/gameware/game/states/{game_states => }/FruitSlicerState.java (98%)
 rename frontend/core/src/com/gameware/game/states/{game_states => }/PlayStateTemplate.java (99%)

diff --git a/frontend/core/src/com/gameware/game/GameWare.java b/frontend/core/src/com/gameware/game/GameWare.java
index a6648d8..10918e9 100644
--- a/frontend/core/src/com/gameware/game/GameWare.java
+++ b/frontend/core/src/com/gameware/game/GameWare.java
@@ -16,7 +16,7 @@ import com.gameware.game.models.Player;
 import com.gameware.game.states.GameStateManager;
 import com.gameware.game.states.LoginState;
 import com.gameware.game.states.MenuState;
-import com.gameware.game.states.game_states.PlayStateTemplate;
+import com.gameware.game.states.PlayStateTemplate;
 
 import java.io.IOException;
 import java.lang.reflect.Constructor;
diff --git a/frontend/core/src/com/gameware/game/states/game_states/BubbleWrapState.java b/frontend/core/src/com/gameware/game/states/BubbleWrapState.java
similarity index 97%
rename from frontend/core/src/com/gameware/game/states/game_states/BubbleWrapState.java
rename to frontend/core/src/com/gameware/game/states/BubbleWrapState.java
index 0a1fffa..5d449bf 100644
--- a/frontend/core/src/com/gameware/game/states/game_states/BubbleWrapState.java
+++ b/frontend/core/src/com/gameware/game/states/BubbleWrapState.java
@@ -1,10 +1,9 @@
-package com.gameware.game.states.game_states;
+package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.gameware.game.sprites.Bubble;
-import com.gameware.game.states.GameStateManager;
 
 import java.util.ArrayList;
 
diff --git a/frontend/core/src/com/gameware/game/states/game_states/ColorRushState.java b/frontend/core/src/com/gameware/game/states/ColorRushState.java
similarity index 99%
rename from frontend/core/src/com/gameware/game/states/game_states/ColorRushState.java
rename to frontend/core/src/com/gameware/game/states/ColorRushState.java
index 12d8bfe..ee8adc4 100644
--- a/frontend/core/src/com/gameware/game/states/game_states/ColorRushState.java
+++ b/frontend/core/src/com/gameware/game/states/ColorRushState.java
@@ -1,10 +1,9 @@
-package com.gameware.game.states.game_states;
+package com.gameware.game.states;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.gameware.game.sprites.ColorRushButton;
 import com.gameware.game.sprites.ColorRushTarget;
-import com.gameware.game.states.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/frontend/core/src/com/gameware/game/states/game_states/FruitSlicerState.java b/frontend/core/src/com/gameware/game/states/FruitSlicerState.java
similarity index 98%
rename from frontend/core/src/com/gameware/game/states/game_states/FruitSlicerState.java
rename to frontend/core/src/com/gameware/game/states/FruitSlicerState.java
index 6c805a9..25e3e86 100644
--- a/frontend/core/src/com/gameware/game/states/game_states/FruitSlicerState.java
+++ b/frontend/core/src/com/gameware/game/states/FruitSlicerState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states.game_states;
+package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
@@ -8,7 +8,6 @@ import com.badlogic.gdx.math.Vector3;
 import com.gameware.game.GameWare;
 import com.gameware.game.sprites.Fruit;
 import com.gameware.game.sprites.SlicingCircle;
-import com.gameware.game.states.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/frontend/core/src/com/gameware/game/states/PauseState.java b/frontend/core/src/com/gameware/game/states/PauseState.java
index 767d260..2dbd72f 100644
--- a/frontend/core/src/com/gameware/game/states/PauseState.java
+++ b/frontend/core/src/com/gameware/game/states/PauseState.java
@@ -9,7 +9,6 @@ import com.gameware.game.sprites.ConfirmationBox;
 import com.gameware.game.sprites.LoadingText;
 import com.gameware.game.sprites.PauseCircle;
 import com.gameware.game.sprites.PauseMenuButton;
-import com.gameware.game.states.game_states.PlayStateTemplate;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/frontend/core/src/com/gameware/game/states/game_states/PlayStateTemplate.java b/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
similarity index 99%
rename from frontend/core/src/com/gameware/game/states/game_states/PlayStateTemplate.java
rename to frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
index 6408670..7f7ed58 100644
--- a/frontend/core/src/com/gameware/game/states/game_states/PlayStateTemplate.java
+++ b/frontend/core/src/com/gameware/game/states/PlayStateTemplate.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states.game_states;
+package com.gameware.game.states;
 
 
 import com.badlogic.gdx.Gdx;
diff --git a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
index cddb5af..0611f81 100644
--- a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
+++ b/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
@@ -11,7 +11,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.gameware.game.GameWare;
 import com.gameware.game.models.Game;
-import com.gameware.game.states.game_states.PlayStateTemplate;
 
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
index e77a8f2..5a41fd0 100644
--- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
@@ -20,7 +20,6 @@ import com.gameware.game.models.Game;
 import com.gameware.game.models.Round;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
-import com.gameware.game.states.game_states.PlayStateTemplate;
 
 import java.io.IOException;
 import java.util.List;
-- 
GitLab


From e5af89e0c6590236427262671d5d04e8b7137354 Mon Sep 17 00:00:00 2001
From: Turid Dahl <turidcd@stud.ntnu.no>
Date: Mon, 20 Apr 2020 11:29:11 +0200
Subject: [PATCH 11/12] Removes start delay and sets it as days per round

---
 .../game/states/CreateNewTournamentState.java | 23 ++++---------------
 .../src/com/gameware/game/states/State.java   |  2 +-
 2 files changed, 5 insertions(+), 20 deletions(-)

diff --git a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
index 0d347a7..6c59b69 100644
--- a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
@@ -46,13 +46,11 @@ public class CreateNewTournamentState extends MenuStateTemplate {
     private final Label timePerRoundLabel = new Label("Days per round", skin);
     private final Label maxPlayersLabel = new Label("Max players", skin);
     private final Label roundsPerGameLabel = new Label("Rounds per game", skin);
-    private final Label startDelayLabel = new Label("Days before start", skin);
 
     private final Label nameLabelQuestion = new Label("Name of the tournament. This will be shown to other players", skin);
-    private final Label timePerRoundLabelQuestion = new Label("Number of days that players have to finish their own turn in the tournament. If they don't finish within the dealine they are kicked out of the tournament.", skin);
+    private final Label timePerRoundLabelQuestion = new Label("Number of days that players have to finish their own turn in the tournament. If they don't finish within the dealine they are kicked out of the tournament.\n\nEven if max number of players has not been reached, the tournament still starts after specified number of days.", skin);
     private final Label maxPlayersLabelQuestion = new Label("Max number of players able to enter the tournament. If max number of players enter and play their round, then the tournament continues.", skin);
     private final Label roundsPerGameLabelQuestion = new Label("Number of rounds per game. For example if you choose 2 games, and have 3 rounds per game then you will play each game 3 times.", skin);
-    private final Label startDelayLabelQuestion = new Label("Max days before tournament starts. Even if max number of players has not been reached, the tournament still starts after specified number of days.", skin);
 
 //    Texts
     private final String backBtnText = "Back";
@@ -69,14 +67,12 @@ public class CreateNewTournamentState extends MenuStateTemplate {
     private SelectBox timePerRoundSelectBox = new SelectBox(skin);
     private SelectBox maxPlayersSelectBox = new SelectBox(skin);
     private SelectBox roundsPerGameSelectBox = new SelectBox(skin);
-    private SelectBox startDelaySelectBox = new SelectBox(skin);
 
 //    User inputs
     private String nameUserInput = "";
     private int timePerRoundUserInput = 1;
     private int maxPlayersUserInput = 2;
     private int roundsPerGameUserInput = 1;
-    private int startDelayUserInput = 1;
 
 //    Variables
     private int page = 1;
@@ -94,7 +90,6 @@ public class CreateNewTournamentState extends MenuStateTemplate {
     private Dialog timePerRoundDialog;
     private Dialog maxPlayersDialog;
     private Dialog roundsPerGameDialog;
-    private Dialog startDelayDialog;
 
 //    Loading text
     private LoadingText loadingText = new LoadingText();
@@ -113,13 +108,11 @@ public class CreateNewTournamentState extends MenuStateTemplate {
         timePerRoundSelectBox.setItems(1,2,3,4,5);
         maxPlayersSelectBox.setItems(2,3,4,5);
         roundsPerGameSelectBox.setItems(1,2,3);
-        startDelaySelectBox.setItems(1,2,3);
 
         nameDialog = makeQuestionIconDialog(nameLabelQuestion);
         timePerRoundDialog = makeQuestionIconDialog(timePerRoundLabelQuestion);
         maxPlayersDialog = makeQuestionIconDialog(maxPlayersLabelQuestion);
         roundsPerGameDialog = makeQuestionIconDialog(roundsPerGameLabelQuestion);
-        startDelayDialog = makeQuestionIconDialog(startDelayLabelQuestion);
 
         makeStage();
     }
@@ -151,17 +144,14 @@ public class CreateNewTournamentState extends MenuStateTemplate {
         innerTable.add(nameInputField).size(nameFieldWidth, inputFieldHeight);
         innerTable.row();
         removeKeyPadAtTouch();
-        innerTable.add(makeTableWithLabelAndQuestionIcon(timePerRoundLabel, timePerRoundDialog));
-        innerTable.add(timePerRoundSelectBox);
-        innerTable.row();
         innerTable.add(makeTableWithLabelAndQuestionIcon(maxPlayersLabel, maxPlayersDialog));
         innerTable.add(maxPlayersSelectBox);
         innerTable.row();
         innerTable.add(makeTableWithLabelAndQuestionIcon(roundsPerGameLabel, roundsPerGameDialog));
         innerTable.add(roundsPerGameSelectBox);
         innerTable.row();
-        innerTable.add(makeTableWithLabelAndQuestionIcon(startDelayLabel, startDelayDialog));
-        innerTable.add(startDelaySelectBox);
+        innerTable.add(makeTableWithLabelAndQuestionIcon(timePerRoundLabel, timePerRoundDialog));
+        innerTable.add(timePerRoundSelectBox);
         rootTable.add(innerTable).colspan(2);
         rootTable.row();
         rootTable.add(errorLabel).colspan(2);
@@ -264,7 +254,6 @@ public class CreateNewTournamentState extends MenuStateTemplate {
                 timePerRoundUserInput = getTimePerRound();
                 maxPlayersUserInput = getMaxPlayers();
                 roundsPerGameUserInput = getRoundsPerGame();
-                startDelayUserInput = getStartDelay();
 
                 stage.clear();
                 makeStage();
@@ -339,7 +328,6 @@ public class CreateNewTournamentState extends MenuStateTemplate {
             timePerRoundSelectBox.setSelected(timePerRoundUserInput);
             maxPlayersSelectBox.setSelected(maxPlayersUserInput);
             roundsPerGameSelectBox.setSelected(roundsPerGameUserInput);
-            startDelaySelectBox.setSelected(startDelayUserInput);
         }
     }
 
@@ -350,7 +338,7 @@ public class CreateNewTournamentState extends MenuStateTemplate {
             return;
         }
         try {
-            tournament = new Tournament(GameWare.getInstance().getPlayer().getId(),chosenGames,nameUserInput, timePerRoundUserInput, maxPlayersUserInput, roundsPerGameUserInput,1,chosenGames.size(),startDelayUserInput);
+            tournament = new Tournament(GameWare.getInstance().getPlayer().getId(),chosenGames,nameUserInput, timePerRoundUserInput, maxPlayersUserInput, roundsPerGameUserInput,1,chosenGames.size(),timePerRoundUserInput);
             tournamentFromDB = QueryIntermediate.createNewTournament(tournament);
             round = QueryIntermediate.getRoundFromTournament(tournamentFromDB.get_id(), GameWare.getInstance().getPlayer().getId(), tournamentFromDB.getCurrentRound());
             gsm.set(new ViewTournamentState(gsm,tournamentFromDB,round));
@@ -376,7 +364,6 @@ public class CreateNewTournamentState extends MenuStateTemplate {
         return (int) roundsPerGameSelectBox.getSelected();
     }
 
-    private int getStartDelay(){ return (int) startDelaySelectBox.getSelected(); }
 
     private void removeKeyPadAtTouch(){
         stage.getRoot().addCaptureListener(new InputListener() {
@@ -404,12 +391,10 @@ public class CreateNewTournamentState extends MenuStateTemplate {
         timePerRoundUserInput = 1;
         maxPlayersUserInput = 2;
         roundsPerGameUserInput = 1;
-        startDelayUserInput = 1;
 
         timePerRoundSelectBox.setSelected(timePerRoundUserInput);
         maxPlayersSelectBox.setSelected(maxPlayersUserInput);
         roundsPerGameSelectBox.setSelected(roundsPerGameUserInput);
-        startDelaySelectBox.setSelected(startDelayUserInput);
 
         for(CheckBox cb : checkBoxes){
             cb.setChecked(false);
diff --git a/frontend/core/src/com/gameware/game/states/State.java b/frontend/core/src/com/gameware/game/states/State.java
index 8a7a363..30353c0 100644
--- a/frontend/core/src/com/gameware/game/states/State.java
+++ b/frontend/core/src/com/gameware/game/states/State.java
@@ -8,7 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.Stage;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
 import com.gameware.game.GameWare;
 
-public abstract class State{
+public abstract class State {
 
 //    Common variables between MenuStateTemplate and PlayStateTemplate
 
-- 
GitLab


From b76fd9a7bb4e78d60153dd52d25a870903e37b12 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tobias=20=C3=98rstad?= <tobiasio@ntnu.no>
Date: Mon, 20 Apr 2020 11:58:28 +0200
Subject: [PATCH 12/12] Made sure players can only join tournaments that have
 not gone past the starttime

---
 backend/api/tournament.js | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/backend/api/tournament.js b/backend/api/tournament.js
index 38fada7..fdb706f 100644
--- a/backend/api/tournament.js
+++ b/backend/api/tournament.js
@@ -220,6 +220,8 @@ router.post("/join", (req, res) => {
             active: true,
             // the array of players cannot already contain the player
             players: { $nin: [playerId] },
+            // we dont want tournaments that have gone past their starttime
+            startTime: { $gte: new Date() },
           },
           // Add the player to the array
           {
@@ -500,6 +502,17 @@ function roundcheck(client, tournament) {
               //if there are less then two people left in the first round, or zero people left in the first round
               //the tournament ends
             }
+            if (rounds.length > 0) {
+              // If there is only one player in the tournaments first round and the starttime
+              // has expired, we end the tournament
+              if (
+                left.length < 2 &&
+                active == 1 &&
+                new Date(start) < new Date()
+              ) {
+                end = true;
+              }
+            }
             functions
               .timeOut(client, tournament, timedOut, timedOutRounds)
               .then(
-- 
GitLab