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] #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