Sfoglia il codice sorgente

Merge branch 'master' of narkampen.nordh.xyz:/home/git/Projects/NarKampen

axel-server 5 anni fa
parent
commit
3073e389b5
32 ha cambiato i file con 927 aggiunte e 284 eliminazioni
  1. 29 12
      Assets/AnswerLineInfoScript.cs
  2. 14 2
      Assets/CategorySelection.cs
  3. 29 7
      Assets/Prefab/LocalGame.prefab
  4. 1 1
      Assets/Prefab/OnlineGamePlayerInfo.prefab
  5. 209 61
      Assets/Prefab/PlayerInfo.prefab
  6. 172 32
      Assets/Scenes/MainMenu.unity
  7. 173 3
      Assets/Scenes/NewGame.unity
  8. 44 24
      Assets/Scenes/narKampen.unity
  9. 9 7
      Assets/Scripts/Database/Database.cs
  10. 66 65
      Assets/Scripts/Database/OnlineDatabase.cs
  11. 10 4
      Assets/Scripts/GameManagerScript.cs
  12. 1 1
      Assets/Scripts/Login/Login.cs
  13. 1 2
      Assets/Scripts/MainGame/ScrollViewScript.cs
  14. 1 0
      Assets/Scripts/MainGame/StatsScript.cs
  15. 1 2
      Assets/Scripts/MainMenu.cs
  16. 3 0
      Assets/Scripts/NewGameScene/GameInfoScript.cs
  17. 13 2
      Assets/Scripts/NewGameScene/GamesScrollController.cs
  18. 9 4
      Assets/Scripts/NewGameScene/InvitePanelScript.cs
  19. 1 1
      Assets/Scripts/NewGameScene/LocalGameScript.cs
  20. 5 2
      Assets/Scripts/NewGameScene/NewOnlineGameScript.cs
  21. 27 11
      Assets/Scripts/NewGameScene/OnlineGameScript.cs
  22. 1 1
      Assets/Scripts/NewGameScene/invitePanelController.cs
  23. 23 4
      Assets/SelectCategoryScript.cs
  24. 6 2
      Assets/Translations/ENGLISH.xml
  25. 6 3
      Assets/Translations/SWEDISH.xml
  26. BIN
      Assets/narKampenLocal.db
  27. 11 5
      Assets/selectCategoriesPanelController.cs
  28. 3 3
      ProjectSettings/ProjectSettings.asset
  29. 1 0
      ProjectSettings/TagManager.asset
  30. 3 1
      dbFiles/FCMMessageing.php
  31. 18 7
      dbFiles/OnlineGames.php
  32. 37 15
      dbFiles/PlayerSearch.php

+ 29 - 12
Assets/AnswerLineInfoScript.cs

@@ -20,12 +20,15 @@ public class AnswerLineInfoScript : MonoBehaviour
     private List<KeyValuePair<string, int>> players;
     private string currentPlayerShown;
     private String signedInName;
+    private GameManagerScript gameManagerScript;
     
     private void Start() {
         nextPlayerButton.onClick.AddListener(ShowNextPlayerAnswerLine);
         prevPlayerButton.onClick.AddListener(ShowPrevPlayerAnswerLine);
         currentPlayerShown = GameManagerScript.GetCurrentPlayer();
         signedInName = Database.Instance.GetSignedInUser().Value;
+        lockedQuestionsText.resizeTextMaxSize = unlockedQuestionsText.resizeTextMaxSize;
+        gameManagerScript = gameManager.GetComponent<GameManagerScript>();
     }
 
     private void Update() {
@@ -36,16 +39,23 @@ public class AnswerLineInfoScript : MonoBehaviour
     }
 
     private void SetQuestionClickable() {
-        if (GameManagerScript.GetCurrentPlayer().Equals(currentPlayerShown, StringComparison.InvariantCultureIgnoreCase)) {
-            newQuestion.GetComponent<NewQuestionCardController>().BackClickable = true;
+        List<KeyValuePair<string, int>> players = gameManagerScript.GetPlayers();
+        if (gameManagerScript.GetGameMode().Equals("ONLINE")) {
+            if (players.Count > 1 && currentPlayerShown != null) {
+                if (GameManagerScript.GetCurrentPlayer().Equals(currentPlayerShown, StringComparison.InvariantCultureIgnoreCase)) {
+                    newQuestion.GetComponent<NewQuestionCardController>().BackClickable = true;
+                } else {
+                    newQuestion.GetComponent<NewQuestionCardController>().BackClickable = false;
+                }
+            }
         } else {
-            newQuestion.GetComponent<NewQuestionCardController>().BackClickable = false;
+                newQuestion.GetComponent<NewQuestionCardController>().BackClickable = true;
         }
     }
 
     public void UpdateButtonsText() {
         if (players == null) {
-            players = gameManager.GetComponent<GameManagerScript>().GetPlayers();
+            players = gameManagerScript.GetPlayers();
         }
 
         if (players.Count <= 1) {
@@ -55,8 +65,10 @@ public class AnswerLineInfoScript : MonoBehaviour
             nextPlayerButton.gameObject.SetActive(true);
             prevPlayerButton.gameObject.SetActive(true);
 
-            if (currentPlayerShown == null) {
+            if (gameManagerScript.GetGameMode().Equals("Online") && currentPlayerShown == null) { // fungerar enbart vid online
                 currentPlayerShown = signedInName;
+            } else if (gameManagerScript.GetGameMode().Equals("Local") && currentPlayerShown == null) {
+                currentPlayerShown = Database.Instance.GetCurrentPlayer(gameManagerScript.GameId,gameManagerScript.GameMode);
             }
 
             string playerBaseText = LocalizationManager.Instance.GetText("ANSWERLINE_OTHER_PLAYER");
@@ -139,7 +151,6 @@ public class AnswerLineInfoScript : MonoBehaviour
 
     private void ShowNextPlayerAnswerLine()
     {
-        GameManagerScript gameManagerScript = gameManager.GetComponent<GameManagerScript>();
         if (nextPlayerButton.GetComponent<AnswerLineInfoPlayerButton>().PlayerName.Equals(LocalizationManager.Instance.GetText("YOUR"))) {
             currentPlayerShown = signedInName;
         } else {
@@ -154,7 +165,6 @@ public class AnswerLineInfoScript : MonoBehaviour
 
     private void ShowPrevPlayerAnswerLine()
     {       
-        GameManagerScript gameManagerScript = gameManager.GetComponent<GameManagerScript>();
         if (prevPlayerButton.GetComponent<AnswerLineInfoPlayerButton>().PlayerName.Equals(LocalizationManager.Instance.GetText("YOUR"))) {
             currentPlayerShown = signedInName;
         } else {
@@ -172,11 +182,18 @@ public class AnswerLineInfoScript : MonoBehaviour
         ScrollViewScript scrollViewScript = scrollView.GetComponent<ScrollViewScript>();
         scrollViewScript.RemoveEverythingFromAnswerline();
         scrollViewScript.SetQuestionsInAnswerLine(questions);
-        //if (GameManagerScript.GetCurrentPlayer().Equals(currentPlayerShown)) {
-        if (Database.Instance.GetSignedInUser().Value.Equals(currentPlayerShown, StringComparison.InvariantCultureIgnoreCase)) {
-            scrollViewScript.SetQuestionsFrosted(false);
-        } else {
-            scrollViewScript.SetQuestionsFrosted(true);
+        if (gameManagerScript.GetGameMode().Equals("Online")) {
+            if (Database.Instance.GetSignedInUser().Value.Equals(currentPlayerShown, StringComparison.InvariantCultureIgnoreCase)) {
+                scrollViewScript.SetQuestionsFrosted(false);
+            } else {
+                scrollViewScript.SetQuestionsFrosted(true);
+            }
+        } else  {
+            if (currentPlayerShown.Equals(Database.Instance.GetCurrentPlayer(gameManagerScript.GameId, gameManagerScript.GameMode))) {
+                scrollViewScript.SetQuestionsFrosted(false);
+            } else {
+                scrollViewScript.SetQuestionsFrosted(true);
+            }
         }
     }
 }

+ 14 - 2
Assets/CategorySelection.cs

@@ -1,4 +1,5 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
@@ -8,10 +9,21 @@ public class CategorySelection : MonoBehaviour
 
     [SerializeField] Text CategoryNameText;
     [SerializeField] Toggle selectionToggle;
+    private int questionCount;
+
+    private Boolean selected;
+
+    public int QuestionCount { get => questionCount; set => questionCount = value; }
+    public bool Selected { get => selected; set => selected = value; }
+
     // Start is called before the first frame update
     void Start()
     {
-        
+        selectionToggle.onValueChanged.AddListener(SelectionChanged);
+    }
+
+    private void SelectionChanged(bool arg0) {
+        Selected = arg0;
     }
 
     // Update is called once per frame

+ 29 - 7
Assets/Prefab/LocalGame.prefab

@@ -60,6 +60,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -136,6 +137,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.392}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -234,6 +236,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -280,10 +283,10 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0.5}
-  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0, y: 0.5}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1679201117906561037
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -299,9 +302,9 @@ MonoBehaviour:
   m_Padding:
     m_Left: 0
     m_Right: 0
-    m_Top: 0
-    m_Bottom: 0
-  m_ChildAlignment: 0
+    m_Top: 2
+    m_Bottom: 2
+  m_ChildAlignment: 4
   m_Spacing: 2
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 0
@@ -321,7 +324,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
+  m_HorizontalFit: 0
   m_VerticalFit: 2
 --- !u!1 &2075312345835932469
 GameObject:
@@ -386,6 +389,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.392}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -487,6 +491,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.6981132, g: 0.121840514, b: 0.121840514, a: 0.6627451}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -626,6 +631,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.033775367, g: 0.6509434, b: 0.051546283, a: 0.7254902}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -796,6 +802,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.392}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -892,6 +899,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.392}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -994,6 +1002,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.9411765}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1094,6 +1103,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1210,6 +1220,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0, g: 0, b: 0, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1348,6 +1359,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1425,6 +1437,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607845, g: 0.19607845, b: 0.19607845, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1504,6 +1517,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1616,6 +1630,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1729,6 +1744,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.9411765}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1886,6 +1902,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.392}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -1984,6 +2001,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -2063,6 +2081,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -2162,7 +2181,7 @@ RectTransform:
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0, y: 0.5}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &5739117512803278509
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -2199,6 +2218,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -2275,6 +2295,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 0.9411765}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
@@ -2385,6 +2406,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []

+ 1 - 1
Assets/Prefab/OnlineGamePlayerInfo.prefab

@@ -869,7 +869,7 @@ MonoBehaviour:
     m_FontStyle: 0
     m_BestFit: 1
     m_MinSize: 10
-    m_MaxSize: 28
+    m_MaxSize: 18
     m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1

+ 209 - 61
Assets/Prefab/PlayerInfo.prefab

@@ -32,15 +32,15 @@ RectTransform:
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
-  - {fileID: 3051462764174508475}
-  - {fileID: 6044339896983845255}
+  - {fileID: 2113870004414737959}
+  - {fileID: 2265581614379094288}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0.000015258789, y: 0}
-  m_SizeDelta: {x: 125, y: 20}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &8355837596623320845
 CanvasRenderer:
@@ -59,17 +59,16 @@ MonoBehaviour:
   m_GameObject: {fileID: 1668827557623854269}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+  m_Color: {r: 1, g: 1, b: 1, a: 0.12941177}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
-      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
   m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
   m_Type: 1
   m_PreserveAspect: 0
@@ -79,6 +78,7 @@ MonoBehaviour:
   m_FillClockwise: 1
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
 --- !u!114 &487875939721856792
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -88,14 +88,14 @@ MonoBehaviour:
   m_GameObject: {fileID: 1668827557623854269}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_IgnoreLayout: 0
   m_MinWidth: -1
   m_MinHeight: 20
   m_PreferredWidth: -1
-  m_PreferredHeight: 20
+  m_PreferredHeight: -1
   m_FlexibleWidth: 1
   m_FlexibleHeight: 0
   m_LayoutPriority: 1
@@ -122,7 +122,7 @@ MonoBehaviour:
   m_GameObject: {fileID: 1668827557623854269}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Padding:
@@ -131,7 +131,7 @@ MonoBehaviour:
     m_Top: 0
     m_Bottom: 0
   m_ChildAlignment: 0
-  m_Spacing: 2
+  m_Spacing: 10
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 0
   m_ChildControlWidth: 1
@@ -149,7 +149,6 @@ GameObject:
   - component: {fileID: 3051462764174508475}
   - component: {fileID: 2950324220866648863}
   - component: {fileID: 8502294024371270356}
-  - component: {fileID: 5020330713745931875}
   m_Layer: 5
   m_Name: PlayerName
   m_TagString: Untagged
@@ -164,18 +163,18 @@ RectTransform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2189208103802656590}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
-  m_Father: {fileID: 8182258568001242865}
+  m_Father: {fileID: 2113870004414737959}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 16}
-  m_Pivot: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 5, y: 0}
+  m_SizeDelta: {x: -10, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &2950324220866648863
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -193,17 +192,16 @@ MonoBehaviour:
   m_GameObject: {fileID: 2189208103802656590}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
-      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
   m_FontData:
     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
     m_FontSize: 14
@@ -211,33 +209,13 @@ MonoBehaviour:
     m_BestFit: 0
     m_MinSize: 10
     m_MaxSize: 40
-    m_Alignment: 0
+    m_Alignment: 3
     m_AlignByGeometry: 0
     m_RichText: 1
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: New Text
---- !u!114 &5020330713745931875
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2189208103802656590}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreLayout: 0
-  m_MinWidth: 50
-  m_MinHeight: -1
-  m_PreferredWidth: 100
-  m_PreferredHeight: -1
-  m_FlexibleWidth: 1
-  m_FlexibleHeight: -1
-  m_LayoutPriority: 1
 --- !u!1 &5650528250997615816
 GameObject:
   m_ObjectHideFlags: 0
@@ -249,7 +227,6 @@ GameObject:
   - component: {fileID: 6044339896983845255}
   - component: {fileID: 8850173315071199892}
   - component: {fileID: 8380995092262412217}
-  - component: {fileID: 6355233126203097465}
   m_Layer: 5
   m_Name: PlayerPoints
   m_TagString: Untagged
@@ -264,18 +241,18 @@ RectTransform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5650528250997615816}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
-  m_Father: {fileID: 8182258568001242865}
-  m_RootOrder: 1
+  m_Father: {fileID: 2265581614379094288}
+  m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 16}
-  m_Pivot: {x: 1, y: 0.5}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &8850173315071199892
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -293,17 +270,16 @@ MonoBehaviour:
   m_GameObject: {fileID: 5650528250997615816}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
   m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
+  m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
-      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
   m_FontData:
     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
     m_FontSize: 14
@@ -311,29 +287,201 @@ MonoBehaviour:
     m_BestFit: 0
     m_MinSize: 10
     m_MaxSize: 40
-    m_Alignment: 0
+    m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: New Text
---- !u!114 &6355233126203097465
+--- !u!1 &6142008753517401199
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2113870004414737959}
+  - component: {fileID: 653781257893925430}
+  - component: {fileID: 2826211507665036786}
+  - component: {fileID: 7355410550280828792}
+  m_Layer: 5
+  m_Name: NamePanel
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2113870004414737959
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6142008753517401199}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 3051462764174508475}
+  m_Father: {fileID: 8182258568001242865}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 20}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &653781257893925430
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6142008753517401199}
+  m_CullTransparentMesh: 0
+--- !u!114 &2826211507665036786
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 5650528250997615816}
+  m_GameObject: {fileID: 6142008753517401199}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &7355410550280828792
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6142008753517401199}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: 100
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: -1
+  m_FlexibleWidth: 1
+  m_FlexibleHeight: -1
+  m_LayoutPriority: 1
+--- !u!1 &8278852657622911528
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2265581614379094288}
+  - component: {fileID: 6280379646137699332}
+  - component: {fileID: 9149763683646833417}
+  - component: {fileID: 2397701629160257509}
+  m_Layer: 5
+  m_Name: PointsPanel
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2265581614379094288
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8278852657622911528}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 6044339896983845255}
+  m_Father: {fileID: 8182258568001242865}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 20}
+  m_Pivot: {x: 1, y: 0.5}
+--- !u!222 &6280379646137699332
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8278852657622911528}
+  m_CullTransparentMesh: 0
+--- !u!114 &9149763683646833417
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8278852657622911528}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &2397701629160257509
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8278852657622911528}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_IgnoreLayout: 0
-  m_MinWidth: 0
+  m_MinWidth: 25
   m_MinHeight: -1
-  m_PreferredWidth: 25
+  m_PreferredWidth: 50
   m_PreferredHeight: -1
   m_FlexibleWidth: 1
   m_FlexibleHeight: -1

+ 172 - 32
Assets/Scenes/MainMenu.unity

@@ -1196,8 +1196,8 @@ MonoBehaviour:
   m_Padding:
     m_Left: 5
     m_Right: 5
-    m_Top: 0
-    m_Bottom: 0
+    m_Top: 3
+    m_Bottom: 3
   m_ChildAlignment: 0
   m_Spacing: 3
   m_ChildForceExpandWidth: 1
@@ -2854,6 +2854,105 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 769825954}
   m_CullTransparentMesh: 0
+--- !u!1 &774651840
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 774651841}
+  - component: {fileID: 774651844}
+  - component: {fileID: 774651843}
+  - component: {fileID: 774651842}
+  m_Layer: 5
+  m_Name: GameIdText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &774651841
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 774651840}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1467582971}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 50, y: 30}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &774651842
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 774651840}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 1
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: -1
+  m_FlexibleWidth: -1
+  m_FlexibleHeight: -1
+  m_LayoutPriority: 1
+--- !u!114 &774651843
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 774651840}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: New Text
+--- !u!222 &774651844
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 774651840}
+  m_CullTransparentMesh: 0
 --- !u!1 &777178505
 GameObject:
   m_ObjectHideFlags: 0
@@ -2906,8 +3005,8 @@ MonoBehaviour:
   m_Padding:
     m_Left: 5
     m_Right: 5
-    m_Top: 0
-    m_Bottom: 0
+    m_Top: 3
+    m_Bottom: 3
   m_ChildAlignment: 0
   m_Spacing: 3
   m_ChildForceExpandWidth: 1
@@ -2963,7 +3062,7 @@ RectTransform:
   m_Children:
   - {fileID: 1306049390}
   m_Father: {fileID: 1467582971}
-  m_RootOrder: 1
+  m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
@@ -3075,9 +3174,10 @@ GameObject:
   - component: {fileID: 861639823}
   - component: {fileID: 861639822}
   - component: {fileID: 861639821}
+  - component: {fileID: 861639824}
   m_Layer: 5
   m_Name: LocalGames
-  m_TagString: Untagged
+  m_TagString: GamesPanelContent
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
@@ -3170,6 +3270,18 @@ MonoBehaviour:
   m_OnValueChanged:
     m_PersistentCalls:
       m_Calls: []
+--- !u!225 &861639824
+CanvasGroup:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 861639819}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
 --- !u!1 &869200448
 GameObject:
   m_ObjectHideFlags: 0
@@ -3243,7 +3355,7 @@ MonoBehaviour:
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 1
   m_ChildControlWidth: 1
-  m_ChildControlHeight: 1
+  m_ChildControlHeight: 0
   m_ChildScaleWidth: 0
   m_ChildScaleHeight: 0
 --- !u!1 &877975416
@@ -3792,8 +3904,8 @@ MonoBehaviour:
   m_TargetGraphic: {fileID: 761483707}
   m_HandleRect: {fileID: 761483706}
   m_Direction: 2
-  m_Value: 0
-  m_Size: 1
+  m_Value: 0.9999816
+  m_Size: 0
   m_NumberOfSteps: 0
   m_OnValueChanged:
     m_PersistentCalls:
@@ -4254,8 +4366,8 @@ GameObject:
   serializedVersion: 6
   m_Component:
   - component: {fileID: 1273003561}
-  - component: {fileID: 1273003563}
   - component: {fileID: 1273003562}
+  - component: {fileID: 1273003563}
   m_Layer: 5
   m_Name: FinishedGamesList
   m_TagString: Untagged
@@ -4278,10 +4390,10 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 0, y: -0.0000076293945}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: -0.0000038146973}
   m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0, y: 1}
+  m_Pivot: {x: 0.5, y: 1}
 --- !u!114 &1273003562
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -4294,7 +4406,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  m_HorizontalFit: 2
+  m_HorizontalFit: 0
   m_VerticalFit: 2
 --- !u!114 &1273003563
 MonoBehaviour:
@@ -4309,16 +4421,16 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Padding:
-    m_Left: 0
-    m_Right: 0
-    m_Top: 10
-    m_Bottom: 10
+    m_Left: 5
+    m_Right: 5
+    m_Top: 3
+    m_Bottom: 3
   m_ChildAlignment: 0
-  m_Spacing: 2
+  m_Spacing: 3
   m_ChildForceExpandWidth: 1
-  m_ChildForceExpandHeight: 0
+  m_ChildForceExpandHeight: 1
   m_ChildControlWidth: 1
-  m_ChildControlHeight: 0
+  m_ChildControlHeight: 1
   m_ChildScaleWidth: 0
   m_ChildScaleHeight: 0
 --- !u!1 &1291769276
@@ -4489,9 +4601,10 @@ GameObject:
   - component: {fileID: 1309186742}
   - component: {fileID: 1309186741}
   - component: {fileID: 1309186740}
+  - component: {fileID: 1309186738}
   m_Layer: 5
   m_Name: OnlineGames
-  m_TagString: Untagged
+  m_TagString: GamesPanelContent
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
@@ -4517,6 +4630,18 @@ RectTransform:
   m_AnchoredPosition: {x: 0, y: -15}
   m_SizeDelta: {x: 0, y: -30}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!225 &1309186738
+CanvasGroup:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1309186736}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
 --- !u!114 &1309186740
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -4870,9 +4995,10 @@ GameObject:
   - component: {fileID: 1442137826}
   - component: {fileID: 1442137825}
   - component: {fileID: 1442137824}
+  - component: {fileID: 1442137823}
   m_Layer: 5
   m_Name: FinishedGames
-  m_TagString: Untagged
+  m_TagString: GamesPanelContent
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
@@ -4894,10 +5020,22 @@ RectTransform:
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: -15}
+  m_SizeDelta: {x: 0, y: -30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!225 &1442137823
+CanvasGroup:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1442137821}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
 --- !u!114 &1442137824
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -4995,6 +5133,7 @@ RectTransform:
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
+  - {fileID: 774651841}
   - {fileID: 1949707973}
   - {fileID: 821322038}
   m_Father: {fileID: 1918349358}
@@ -5373,8 +5512,8 @@ MonoBehaviour:
   m_TargetGraphic: {fileID: 359479520}
   m_HandleRect: {fileID: 359479519}
   m_Direction: 2
-  m_Value: 0
-  m_Size: 1
+  m_Value: 0.99997556
+  m_Size: 0.16665691
   m_NumberOfSteps: 0
   m_OnValueChanged:
     m_PersistentCalls:
@@ -6473,7 +6612,7 @@ MonoBehaviour:
   m_TargetGraphic: {fileID: 974731453}
   m_HandleRect: {fileID: 974731452}
   m_Direction: 2
-  m_Value: 1.0000002
+  m_Value: 1.0000006
   m_Size: 0
   m_NumberOfSteps: 0
   m_OnValueChanged:
@@ -6698,6 +6837,7 @@ MonoBehaviour:
   answerTimeValueText: {fileID: 447160652}
   questionsToWinValueText: {fileID: 732727041}
   DaysToStartRoundValueText: {fileID: 1983562793}
+  GameIdText: {fileID: 774651843}
 --- !u!114 &1918349361
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -6711,7 +6851,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 0.78431374}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_Maskable: 1
   m_OnCullStateChanged:
@@ -6979,7 +7119,7 @@ RectTransform:
   m_Children:
   - {fileID: 934498987}
   m_Father: {fileID: 1467582971}
-  m_RootOrder: 0
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}

+ 173 - 3
Assets/Scenes/NewGame.unity

@@ -3817,8 +3817,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: -60}
+  m_AnchoredPosition: {x: 0, y: 15}
+  m_SizeDelta: {x: 0, y: -90}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &511402649
 MonoBehaviour:
@@ -6597,6 +6597,81 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 827356634}
   m_CullTransparentMesh: 0
+--- !u!1 &833363804
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 833363805}
+  - component: {fileID: 833363807}
+  - component: {fileID: 833363806}
+  m_Layer: 5
+  m_Name: TotalsPanel
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &833363805
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 833363804}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 2140736808}
+  m_Father: {fileID: 1272715544}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0, y: 30}
+  m_SizeDelta: {x: 0, y: 30}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &833363806
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 833363804}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &833363807
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 833363804}
+  m_CullTransparentMesh: 0
 --- !u!1 &846943916
 GameObject:
   m_ObjectHideFlags: 0
@@ -9499,6 +9574,7 @@ RectTransform:
   m_Children:
   - {fileID: 21398510}
   - {fileID: 511402648}
+  - {fileID: 833363805}
   - {fileID: 1530473169}
   m_Father: {fileID: 1068393617}
   m_RootOrder: 1
@@ -10460,6 +10536,7 @@ MonoBehaviour:
     type: 3}
   SelectCategoryPanel: {fileID: 728032754}
   ContentPanel: {fileID: 362991290}
+  TotalsText: {fileID: 2140736810}
 --- !u!114 &1437860097
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -10840,7 +10917,7 @@ RectTransform:
   m_Children:
   - {fileID: 1355205733}
   m_Father: {fileID: 1272715544}
-  m_RootOrder: 2
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0}
   m_AnchorMax: {x: 0.5, y: 0}
@@ -13428,6 +13505,7 @@ MonoBehaviour:
   answerTimeValueText: {fileID: 0}
   questionsToWinValueText: {fileID: 0}
   DaysToStartRoundValueText: {fileID: 0}
+  GameIdText: {fileID: 0}
 --- !u!225 &1990535486
 CanvasGroup:
   m_ObjectHideFlags: 0
@@ -14597,3 +14675,95 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2140195008}
   m_CullTransparentMesh: 0
+--- !u!1 &2140736807
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2140736808}
+  - component: {fileID: 2140736811}
+  - component: {fileID: 2140736810}
+  - component: {fileID: 2140736809}
+  m_Layer: 5
+  m_Name: TotalsText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2140736808
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2140736807}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 833363805}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2140736809
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2140736807}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 539bd096d40d9934d916d02e161ee660, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  key: SELECT_CATEGORIES_TOTALS
+--- !u!114 &2140736810
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2140736807}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: New Text
+--- !u!222 &2140736811
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2140736807}
+  m_CullTransparentMesh: 0

+ 44 - 24
Assets/Scenes/narKampen.unity

@@ -343,7 +343,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 0.16259286}
   m_AnchoredPosition: {x: -0.0002746582, y: 0}
-  m_SizeDelta: {x: -0.00048828125, y: 2}
+  m_SizeDelta: {x: -0.00048828125, y: 0}
   m_Pivot: {x: 0.5, y: 0}
 --- !u!114 &41448115
 MonoBehaviour:
@@ -643,7 +643,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 30}
+  m_SizeDelta: {x: 0, y: 50}
   m_Pivot: {x: 0.5, y: 0}
 --- !u!114 &210243975
 MonoBehaviour:
@@ -1043,7 +1043,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 200, y: 30}
+  m_SizeDelta: {x: 200, y: 50}
   m_Pivot: {x: 0, y: 0}
 --- !u!114 &343030763
 MonoBehaviour:
@@ -2154,10 +2154,10 @@ RectTransform:
   m_Father: {fileID: 41448113}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0.5}
-  m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 160, y: 30}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0.000030517578, y: 0}
+  m_SizeDelta: {x: -264, y: -28}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1050970646
 MonoBehaviour:
@@ -2436,7 +2436,7 @@ MonoBehaviour:
     m_Right: 0
     m_Top: 0
     m_Bottom: 0
-  m_ChildAlignment: 4
+  m_ChildAlignment: 0
   m_Spacing: 5
   m_ChildForceExpandWidth: 0
   m_ChildForceExpandHeight: 0
@@ -2499,7 +2499,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
+  m_SizeDelta: {x: -10, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1140858113
 MonoBehaviour:
@@ -3145,7 +3145,7 @@ RectTransform:
   m_AnchorMin: {x: 1, y: 0.5}
   m_AnchorMax: {x: 1, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 740, y: 30}
+  m_SizeDelta: {x: 740, y: 50}
   m_Pivot: {x: 1, y: 0.5}
 --- !u!114 &1312570246
 MonoBehaviour:
@@ -3172,7 +3172,7 @@ MonoBehaviour:
     m_FontStyle: 0
     m_BestFit: 1
     m_MinSize: 10
-    m_MaxSize: 20
+    m_MaxSize: 40
     m_Alignment: 3
     m_AlignByGeometry: 0
     m_RichText: 1
@@ -3416,7 +3416,7 @@ RectTransform:
   m_AnchorMin: {x: 1, y: 0}
   m_AnchorMax: {x: 1, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 200, y: 30}
+  m_SizeDelta: {x: 200, y: 50}
   m_Pivot: {x: 1, y: 0}
 --- !u!114 &1572950264
 MonoBehaviour:
@@ -3644,8 +3644,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 14.999999}
-  m_SizeDelta: {x: 0, y: -30}
+  m_AnchoredPosition: {x: 0, y: 25}
+  m_SizeDelta: {x: 0, y: -50}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1776196331
 MonoBehaviour:
@@ -3848,7 +3848,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
+  m_SizeDelta: {x: -10, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1810996869
 MonoBehaviour:
@@ -3927,7 +3927,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0.5}
   m_AnchorMax: {x: 0, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 740, y: 30}
+  m_SizeDelta: {x: 740, y: 50}
   m_Pivot: {x: 0, y: 0.5}
 --- !u!114 &1835093814
 MonoBehaviour:
@@ -3954,7 +3954,7 @@ MonoBehaviour:
     m_FontStyle: 0
     m_BestFit: 1
     m_MinSize: 10
-    m_MaxSize: 20
+    m_MaxSize: 40
     m_Alignment: 5
     m_AlignByGeometry: 0
     m_RichText: 1
@@ -4493,10 +4493,10 @@ RectTransform:
   m_Father: {fileID: 1119394965}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 0.16259286}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 38.701004}
-  m_SizeDelta: {x: 0, y: -77.402435}
+  m_AnchoredPosition: {x: 0, y: 0.115997314}
+  m_SizeDelta: {x: 0, y: -0.23153687}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &2082192735
 MonoBehaviour:
@@ -5683,22 +5683,22 @@ PrefabInstance:
     - target: {fileID: 7679625125739625585, guid: 3394fe203de584e40a860468e3563888,
         type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 8.8
       objectReference: {fileID: 0}
     - target: {fileID: 7679625125739625585, guid: 3394fe203de584e40a860468e3563888,
         type: 3}
       propertyPath: m_AnchoredPosition.y
-      value: 0
+      value: 1.8
       objectReference: {fileID: 0}
     - target: {fileID: 7679625125739625585, guid: 3394fe203de584e40a860468e3563888,
         type: 3}
       propertyPath: m_SizeDelta.x
-      value: 506.5
+      value: 750
       objectReference: {fileID: 0}
     - target: {fileID: 7679625125739625585, guid: 3394fe203de584e40a860468e3563888,
         type: 3}
       propertyPath: m_SizeDelta.y
-      value: 191.8
+      value: 500
       objectReference: {fileID: 0}
     - target: {fileID: 7679625125739625585, guid: 3394fe203de584e40a860468e3563888,
         type: 3}
@@ -5795,6 +5795,26 @@ PrefabInstance:
       propertyPath: m_AnchoredPosition.y
       value: 0
       objectReference: {fileID: 0}
+    - target: {fileID: 7679625126394289811, guid: 3394fe203de584e40a860468e3563888,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 7679625126521092508, guid: 3394fe203de584e40a860468e3563888,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7679625126672602843, guid: 3394fe203de584e40a860468e3563888,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 25
+      objectReference: {fileID: 0}
+    - target: {fileID: 7679625126672602843, guid: 3394fe203de584e40a860468e3563888,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: -150
+      objectReference: {fileID: 0}
     m_RemovedComponents:
     - {fileID: 7679625125739625588, guid: 3394fe203de584e40a860468e3563888, type: 3}
     - {fileID: 7679625125739625590, guid: 3394fe203de584e40a860468e3563888, type: 3}

+ 9 - 7
Assets/Scripts/Database/Database.cs

@@ -147,11 +147,12 @@ public class Database : MonoBehaviour {
         CloseConnection();
     }
     
-    internal void FindRandomPlayer()
+    internal List<OnlineDatabase.UserName> FindRandomPlayer(int playerId)
     {
-        if (gameMode.Equals("Online")) {
-            OnlineDatabase.Instance.FindRandomPlayer();
-        }
+        List<OnlineDatabase.UserName> result = new List<OnlineDatabase.UserName>();
+        result = OnlineDatabase.Instance.FindRandomPlayer(playerId);
+
+        return result;
     }
 
     private IDbCommand GetConnection() {
@@ -213,7 +214,10 @@ public class Database : MonoBehaviour {
         if (gameMode.Equals("Online")) {
             OnlineDatabase.Instance.SetGameFinished(gameId, gameMode);
         } else {
-
+            string sql = "UPDATE game SET finishedDate = DATETIME() WHERE id = " + gameId;
+            IDbCommand cmd = GetConnection();
+            cmd.CommandText = sql;
+            cmd.ExecuteNonQuery();
         }
     }
 
@@ -298,8 +302,6 @@ public class Database : MonoBehaviour {
         string currentPlayerName = "";
         int currentPoints = 0;
         while (reader.Read()) {
-
-
             if (currentGame != reader.GetInt32(0)) {
                 localGame = Instantiate(prefab, new Vector2(0, 0), Quaternion.identity) as GameObject;
                 lgs = localGame.GetComponent<LocalGameScript>();

+ 66 - 65
Assets/Scripts/Database/OnlineDatabase.cs

@@ -9,8 +9,8 @@ using System.IO;
 using System.Text;
 
 public class OnlineDatabase : MonoBehaviour {
-    private const string onlineQuestionsUrl = "narkampen.nordh.xyz/narKampen/dbFiles/Question.php";
-    private const string serverUrl = "narkampen.nordh.xyz/narKampen/dbFiles/";
+    private const string onlineQuestionsUrl = "nordh.xyz/narKampen/dbFiles/Question.php";
+    private const string serverUrl = "nordh.xyz/narKampen/dbFiles/";
     string gameMode;
     int winAmount = -1;
 
@@ -148,7 +148,10 @@ public class OnlineDatabase : MonoBehaviour {
         public string lastPlayedDate;
         public string finishedDate;
         public string status;
-        public string playerToAct;
+        public string userId;
+        public string username;
+        public string userLockedQuestions;
+        public string playerStatus;
     }
 
     [Serializable]
@@ -204,10 +207,10 @@ public class OnlineDatabase : MonoBehaviour {
 
     public string QuestionString { get => questionString; set => questionString = value; }
 
-    internal void SendGameOverMessage(int gameId, List<KeyValuePair<string, int>> players, string currentPlayer)
+    internal void SendGameOverMessage(int gameId, List<KeyValuePair<string, int>> players, string currentPlayer, int rounds)
     {
-        string message = "Den som van var " + currentPlayer + "!"; //TODO
-        string title = "Spelet slut!";                              //TODO 
+        string message = String.Format(LocalizationManager.Instance.GetText("GAME_OVER_MESSAGE"), currentPlayer, rounds.ToString());
+        string title = LocalizationManager.Instance.GetText("GAME_OVER_TITLE"); 
 
         WWWForm form = new WWWForm();
         form.AddField("gameId", gameId);
@@ -297,49 +300,54 @@ public class OnlineDatabase : MonoBehaviour {
         GameObject onlineGameObject;
         OnlineGameScript ogs = null;
         List<OnlineGameScript> games = new List<OnlineGameScript>();
+        int gameId = -1;
+
+    OnlineGame prevGame = null;
         foreach (OnlineGame game in og.onlineGamesList) {
-            onlineGameObject = Instantiate(prefab, new Vector2(0, 0), Quaternion.identity) as GameObject;
-            ogs = onlineGameObject.GetComponent<OnlineGameScript>();
-            ogs.CurrentPlayer = game.currentPlayer;
-            ogs.SetGameStatus(game.status);
-            Int32.TryParse(game.id, out int gameId);
-            List<KeyValuePair<string, string>> playerInfos = GetGameInfo(gameId);
-            if (game.status.Equals("PENDING")) {
-                string extraInfo = "";
-                foreach (KeyValuePair<string, string> s in playerInfos) {
-                    if (s.Value.Equals("WAITING") && s.Key.Equals(userName, StringComparison.InvariantCultureIgnoreCase)) {
-                        ogs.SetGameStatus("INVITED");
-                        extraInfo += s.Key + ",";
-                    } else if (s.Value.EndsWith("WAITING")) {
-                        extraInfo += s.Key + ",";
+            Int32.TryParse(game.id, out int currentGameId);
+            if (gameId != currentGameId) { // Spel ej i listan
+                if (ogs != null) { // lägg till spel i listan, inte första gången
+                    SetGlobalGameInfo(userName, ogs, gameId, prevGame);
+                    if (game.currentPlayer.Equals(Database.Instance.GetSignedInUser().Value, StringComparison.InvariantCultureIgnoreCase)) {
+                        ogs.SetGameStatus("YOUR_TURN");
                     }
+                    games.Add(ogs);
                 }
-                extraInfo = extraInfo.TrimEnd(',');
-                ogs.SetGameStatusText(extraInfo);
-
-            } else if (game.status.Equals("OTHERS_TURN")) {
-                ogs.SetGameStatusText(game.playerToAct);
-            } else if (game.status.Equals("ACTIVE")) {
-                ogs.SetGameStatusText(game.playerToAct);
-            } else {
-                ogs.SetGameStatusText();
-            }
+                onlineGameObject = Instantiate(prefab, new Vector2(0, 0), Quaternion.identity) as GameObject;
+                ogs = onlineGameObject.GetComponent<OnlineGameScript>();
+                gameId = currentGameId;
 
-            ogs.SetId(game.id);
-            ogs.SetWinNumber(game.winNumber);
-            ogs.SetAnswerTimer(game.answerTimer);
-            ogs.SetRoundTimeLimit(game.roundTimeLimit);
-            ogs.SetRound(game.round);
-            ogs.StartDate = game.startDate;
-            ogs.LastPlayedDate = game.lastPlayedDate;
-
-            games.Add(ogs);
-            ogs.PlayerInfos = playerInfos;
+                if (game.currentPlayer.Equals(game.userId)) { // om första raden i spelinfo är annan spelare och det är dennes tur att agera
+                    ogs.CurrentPlayer = game.username;
+                }
+                ogs.addPlayer(game.username);
+                ogs.addPlayerInfo(game.username, game.playerStatus);
+            } else { // Spel redan i listan, fyll på med info
+                ogs.addPlayer(game.username);
+                ogs.addPlayerInfo(game.username, game.playerStatus);
+                if (game.currentPlayer.Equals(game.userId)) {
+                    ogs.CurrentPlayer = game.username;
+                }
+            }
+            prevGame = game;
         }
-
+        SetGlobalGameInfo(userName, ogs, gameId, og.onlineGamesList[og.onlineGamesList.Count - 1]);
+        games.Add(ogs);
+        
         return games;
     }
 
+    private void SetGlobalGameInfo(string userName, OnlineGameScript ogs, int gameId, OnlineGame game) {
+        ogs.SetGameStatus(game.status);
+        ogs.SetId(game.id);
+        ogs.SetWinNumber(game.winNumber);
+        ogs.SetAnswerTimer(game.answerTimer);
+        ogs.SetRoundTimeLimit(game.roundTimeLimit);
+        ogs.SetRound(game.round);
+        ogs.StartDate = game.startDate;
+        ogs.LastPlayedDate = game.lastPlayedDate;
+    }
+
     internal List<KeyValuePair<string, string>> GetGameInfo(int gameId) {
         List<KeyValuePair<string, string>> returnList = new List<KeyValuePair<string, string>>();
 
@@ -603,28 +611,18 @@ public class OnlineDatabase : MonoBehaviour {
     }
 
     public List<UserName> GetUsersToInvite(string searchString) {
-        string postUrl = "narkampen.nordh.xyz/narKampen/dbFiles/PlayerSearch.php?";
-        postUrl += "search=" + UnityWebRequest.EscapeURL(searchString);
+        WWWForm form = new WWWForm();
+        form.AddField("SearchString", UnityWebRequest.EscapeURL(searchString));
+        form.AddField("f", "PlayerSearch");
 
-        UserNames uNames = new UserNames();
-        UnityWebRequest www = UnityWebRequest.Get(postUrl);
-        www.SendWebRequest();
+        String response = CallOnlineDatabaseWithResponse("PlayerSearch.php", form);
 
-        if (www.isNetworkError || www.isHttpError) {
-            Debug.Log(www.error);
-        } else {
-            while (!www.isDone) {
-            }
-            // Show result
-            string jsonData = www.downloadHandler.text;
+        response = "{\"usernamesList\" :  " + response + " }";
 
-            if (!jsonData.Equals("")) {
-                jsonData = "{\"usernamesList\" :  " + jsonData + " }";
+        UserNames uNames = new UserNames();
+
+        JsonUtility.FromJsonOverwrite(response, uNames);
 
-                JsonUtility.FromJsonOverwrite(jsonData, uNames);
-            }
-        }
-        // TODO handle empty
         return uNames.usernamesList;
     }
 
@@ -675,16 +673,19 @@ public class OnlineDatabase : MonoBehaviour {
     }
 
     
-    internal List<string> FindRandomPlayer() {
+    internal List<UserName> FindRandomPlayer(int playerId) {
         List<string> returnValue = new List<string>();
         WWWForm form = new WWWForm();
-        form.AddField("f", "FindRandomPlayer");
+        form.AddField("playerId", playerId);
+        form.AddField("f", "FindRandomPlayers");
 
-        String response = CallOnlineDatabaseWithResponse("", form);
-        
-        //TODO FIX ME
+        String response = CallOnlineDatabaseWithResponse("PlayerSearch.php", form);
+        response = "{\"usernamesList\" :  " + response + " }";
+        UserNames uNames = new UserNames();
+
+        JsonUtility.FromJsonOverwrite(response, uNames);
 
-        return returnValue;
+        return uNames.usernamesList;
     }
 
 

+ 10 - 4
Assets/Scripts/GameManagerScript.cs

@@ -7,7 +7,6 @@ using UnityEngine.SceneManagement;
 
 public class GameManagerScript : MonoBehaviour {
 
-    private int playerCount;
     private int questionTimer;
     private string gameMode;
 
@@ -144,9 +143,10 @@ public class GameManagerScript : MonoBehaviour {
                 Database.Instance.GetRoundValue(GameId, GameMode)));
             dialog.SetOnAccept(LocalizationManager.Instance.GetText("OK"), () => {
                 Database.Instance.SetGameFinished(GameId, GameMode);
-
+                scrollViewScript.SetAllQuestionsLocked(true);
+                GameObject.Find("NewQuestion").GetComponent<NewQuestionCardController>().BackClickable = false;
                 if (GameMode.Equals("Online")) {
-                    OnlineDatabase.Instance.SendGameOverMessage(GameId, players, currentPlayer);
+                    OnlineDatabase.Instance.SendGameOverMessage(GameId, players, currentPlayer, Database.Instance.GetRoundValue(GameId, GameMode));
                 }
 
                 dialog.Hide();
@@ -263,7 +263,13 @@ public class GameManagerScript : MonoBehaviour {
         dialog.SetMessage(String.Format(message, currentPlayer));
         dialog.SetOnAccept(LocalizationManager.Instance.GetText("OK"), () => {
             scrollViewScript.RemoveEverythingFromAnswerline();
-            List<NewQuestionData> questions = Database.Instance.GetPlayerQuestions(GameId, currentPlayer, GetGameMode());
+            string gameMode = GetGameMode();
+            List<NewQuestionData> questions = new List<NewQuestionData>();
+            if (gameMode.Equals("Online")) {
+                questions = Database.Instance.GetPlayerQuestions(GameId, Database.Instance.GetSignedInUser().Value, gameMode);
+            } else {
+                questions = Database.Instance.GetPlayerQuestions(GameId, currentPlayer, gameMode);
+            }
             scrollViewScript.SetQuestionsInAnswerLine(questions);
 
             statsScript.SetQuestionsLost(Database.Instance.GetQuestionsLost(GameId, currentPlayer, GetGameMode()));

+ 1 - 1
Assets/Scripts/Login/Login.cs

@@ -26,7 +26,7 @@ public class Login : MonoBehaviour {
 
     private string Username;
     private string Password;
-    private string loginUrl = "http://narkampen.nordh.xyz/narKampen/dbFiles/Login.php?";
+    private string loginUrl = "http://nordh.xyz/narKampen/dbFiles/Login.php?";
     private Color errorColor;
     private EventSystem system;
 

+ 1 - 2
Assets/Scripts/MainGame/ScrollViewScript.cs

@@ -187,7 +187,6 @@ public class ScrollViewScript : MonoBehaviour {
     }
 
     public void RemoveEverythingFromAnswerline() {
-        
         foreach (Transform child in contentPanel.transform) {
             Destroy(child.gameObject);
         }
@@ -207,7 +206,7 @@ public class ScrollViewScript : MonoBehaviour {
             }
         }
         gameManagerScript.UpdateQuestiosLost(lostQuestions, currentPlayer);
-        statsScript.SetQuestionsInAnswerLine(currentPlayer, contentPanel.GetComponents<AnswerLineQuestionCard>().Length);
+        statsScript.SetQuestionsInAnswerLine(currentPlayer, contentPanel.GetComponentsInChildren<AnswerLineQuestionCard>().Length);
     }
 
  

+ 1 - 0
Assets/Scripts/MainGame/StatsScript.cs

@@ -52,6 +52,7 @@ public class StatsScript : MonoBehaviour {
         playerTitle.SetStatName(LocalizationManager.Instance.GetText("PLAYERS"));
         playerTitle.SetStatValue("");
         playerTitle.MakeBold();
+        playerTitle.GetComponent<RectTransform>().sizeDelta = new Vector2(playerTitle.GetComponent<RectTransform>().rect.width,50f);
         playerTitle.SetLocalizationKey("PLAYERS");
 
         statLines.Add(round);

+ 1 - 2
Assets/Scripts/MainMenu.cs

@@ -88,7 +88,6 @@ public class MainMenu : MonoBehaviour {
             Destroy(lgs);
             Destroy(lgs.gameObject);
         }
-
        
         int localIndex = 1;
         int finishedIndex = 1;
@@ -101,7 +100,7 @@ public class MainMenu : MonoBehaviour {
                 lgs.transform.SetParent(localGamesList.transform, false);
                 lgs.transform.SetSiblingIndex(localIndex++);
             } else {
-                lgs.DisableStartButton();
+                lgs.DestroyStartButton();
                 lgs.transform.SetParent(finishedGamesList.transform, false);
                 lgs.transform.SetSiblingIndex(finishedIndex++);
             }

+ 3 - 0
Assets/Scripts/NewGameScene/GameInfoScript.cs

@@ -22,6 +22,7 @@ public class GameInfoScript : MonoBehaviour {
     [SerializeField] Text questionsToWinValueText;
     [SerializeField] Text DaysToStartRoundValueText;
 
+    [SerializeField] Text GameIdText;
     // Start is called before the first frame update
     void Start() {
         cancelButton.onClick.AddListener(Hide);
@@ -57,6 +58,8 @@ public class GameInfoScript : MonoBehaviour {
             opi.transform.SetParent(playersPanel, false);
         }
 
+        GameIdText.text = onlineGameScript.GetId().ToString();
+
         acceptButton.enabled = false;
         acceptButton.interactable = false;
 

+ 13 - 2
Assets/Scripts/NewGameScene/GamesScrollController.cs

@@ -44,12 +44,10 @@ public class GamesScrollController : MonoBehaviour, IPointerClickHandler {
         } else if (objectName.Equals("FinishedGamesTitle")) {
             if (finishExpanded) {
                 Minimize(finishedGamesPanel);
-                finishedGamesPanel.GetComponentInChildren<Scrollbar>().handleRect.parent.GetComponentInChildren<Image>().enabled = false;
             } else {
                 Maximize(finishedGamesPanel);
                 Minimize(localGamesPanel);
                 Minimize(onlineGamesPanel);
-                finishedGamesPanel.GetComponentInChildren<Scrollbar>().handleRect.parent.GetComponentInChildren<Image>().enabled = true;
             }
         }
     }
@@ -57,15 +55,28 @@ public class GamesScrollController : MonoBehaviour, IPointerClickHandler {
     public void OnPointerClick(PointerEventData eventData) {
         GameObject clickedObject = GameObject.Find(eventData.pointerPress.name);
         expandThis(clickedObject.name);
+        // Möjligt populera finished games när den expanderas
     }
 
     private void Maximize(GameObject activeObject) {
         float gamesPanelHeight = gamesPanel.GetComponent<RectTransform>().rect.height;
 
         activeObject.GetComponent<RectTransform>().sizeDelta = new Vector2(activeObject.GetComponent<RectTransform>().rect.width, gamesPanelHeight - 60f);
+        for (int i = 0; i < activeObject.transform.childCount; i++) {
+            if (activeObject.transform.GetChild(i).gameObject.tag.Equals("GamesPanelContent")) {
+                activeObject.transform.GetChild(i).GetComponent<CanvasGroup>().alpha = 1f;
+                break;
+            }
+        }
     }
 
     private void Minimize(GameObject activeObject) {
         activeObject.GetComponent<RectTransform>().sizeDelta = new Vector2(activeObject.GetComponent<RectTransform>().rect.width, 30f);
+        for (int i = 0; i < activeObject.transform.childCount; i++) {
+            if (activeObject.transform.GetChild(i).gameObject.tag.Equals("GamesPanelContent")) {
+                activeObject.transform.GetChild(i).GetComponent<CanvasGroup>().alpha = 0f;
+                break;
+            }
+        }
     }
 }

+ 9 - 4
Assets/Scripts/NewGameScene/InvitePanelScript.cs

@@ -65,7 +65,8 @@ public class InvitePanelScript : MonoBehaviour {
     }
 
     void FindRandomPlayer() {
-        Database.Instance.FindRandomPlayer();
+        List<OnlineDatabase.UserName> users = Database.Instance.FindRandomPlayer(Database.Instance.GetSignedInUser().Key);
+        AddToInvitePanel(users);
     }
 
     public List<InviteSearchResult> GetSelectedUsersForInvite() {
@@ -100,6 +101,10 @@ public class InvitePanelScript : MonoBehaviour {
         searchActive = false;
 
         List<OnlineDatabase.UserName> foundUsers = OnlineDatabase.Instance.GetUsersToInvite(searchField.text);
+        AddToInvitePanel(foundUsers);
+    }
+
+    private void AddToInvitePanel(List<OnlineDatabase.UserName> foundUsers) {
         InviteSearchResult[] added = searchResultPanel.GetComponentsInChildren<InviteSearchResult>();
         foreach (OnlineDatabase.UserName un in foundUsers) {
             if (Database.Instance.GetSignedInUser().Key.ToString().Equals(un.id)) {
@@ -107,14 +112,14 @@ public class InvitePanelScript : MonoBehaviour {
             }
             bool skip = false;
             foreach (InviteSearchResult addedRes in added) {
-                if (addedRes.GetName().Equals(un.username))  {
+                if (addedRes.GetName().Equals(un.username)) {
                     skip = true;
                     break;
                 }
             }
             if (!skip) {
-                GameObject question = Instantiate(inviteSearchResultPrefab, new Vector2(0, 0), Quaternion.identity) as GameObject;
-                InviteSearchResult res = question.GetComponent<InviteSearchResult>();
+                GameObject invSearchRes = Instantiate(inviteSearchResultPrefab, new Vector2(0, 0), Quaternion.identity) as GameObject;
+                InviteSearchResult res = invSearchRes.GetComponent<InviteSearchResult>();
                 res.SetName(un.username);
                 res.SetId(un.id);
                 res.transform.SetParent(searchResultPanel.transform, false);

+ 1 - 1
Assets/Scripts/NewGameScene/LocalGameScript.cs

@@ -92,7 +92,7 @@ public class LocalGameScript : MonoBehaviour
         dialog.Show();
     }
 
-    public void DisableStartButton() {
+    public void DestroyStartButton() {
         Destroy(startButton.gameObject);
     }
 

+ 5 - 2
Assets/Scripts/NewGameScene/NewOnlineGameScript.cs

@@ -17,18 +17,21 @@ public class NewOnlineGameScript : MonoBehaviour
     [SerializeField] GameObject categoryPanel;
 
     private InvitePanelScript ips;
+    private selectCategoriesPanelController selectedCategoriesController;
     // Start is called before the first frame update
     void Start()
     {
         StartButton.onClick.AddListener(StartNewOnlineGame);
         StartButton.interactable = false;
         ips = invitePanel.GetComponent<InvitePanelScript>();
+        selectedCategoriesController = categoryPanel.GetComponent<selectCategoriesPanelController>();
     }
 
     // Update is called once per frame
     void Update()
     {
-        if (ips.AreThereInvites()) {
+        if (ips.AreThereInvites() &&
+            selectedCategoriesController.GetSelectedCategories().Sum(c => c.questionCount) > 0) { // Fungerar ej, stoppar inte vid 0
             StartButton.interactable = true;
         } 
         // TODO, make sure there are enough questions selected in categories
@@ -36,7 +39,7 @@ public class NewOnlineGameScript : MonoBehaviour
 
     void StartNewOnlineGame() {
         List<InviteSearchResult> inviteUsers = ips.GetSelectedUsersForInvite();
-        List<CategoryPanel.Category> selectedCategories = categoryPanel.GetComponent<selectCategoriesPanelController>().GetSelectedCategories();
+        List<CategoryPanel.Category> selectedCategories = selectedCategoriesController.GetSelectedCategories();
 
         List<int> selectedCategoryIds = selectedCategories.Select(c => c.id).ToList();
 

+ 27 - 11
Assets/Scripts/NewGameScene/OnlineGameScript.cs

@@ -8,6 +8,7 @@ public class OnlineGameScript : MonoBehaviour {
 
     // Status color Pending, not your turn, your turn, declined
     List<Color32> statusColors = new List<Color32>() { new Color32(234, 164, 17, 100), new Color32(255, 255, 24, 175), new Color32(0, 255, 0, 100), new Color32(219, 12, 65, 100), new Color32(12,12,219,150) };
+
     public Text gameStatusText;
     public Text gameTitleText;
 
@@ -21,6 +22,8 @@ public class OnlineGameScript : MonoBehaviour {
     private string lastPlayedDate;
     private string finishedDate;
 
+    private List<String> players;
+
     private List<KeyValuePair<string, string>> playerInfos;
 
     public int GetId() {
@@ -42,14 +45,18 @@ public class OnlineGameScript : MonoBehaviour {
     public string GameStatus {
         get { return gameStatus; }
         set {
-            gameStatus = value;
+            if (value.Equals("Avtive") && CurrentPlayer.Equals(Database.Instance.GetSignedInUser().Value, StringComparison.InvariantCultureIgnoreCase)) {
+                gameStatus = "YOUR_TURN";
+            } else {
+                gameStatus = value;
+            }
             SetColor(gameStatus);
-
-            //SetGameStatusText();
+            SetGameStatusText();
         }
     }
 
     public List<KeyValuePair<string, string>> PlayerInfos { get => playerInfos; set => playerInfos = value; }
+    public List<string> Players { get => players; set => players = value; }
 
     private string PENDING_TITLE = "ONLINE_GAME_STATUS_TITLE_VALUE_PENDING";
     private string ACTIVE_TITLE = "ONLINE_GAME_STATUS_TITLE_ACTIVE";
@@ -83,6 +90,20 @@ public class OnlineGameScript : MonoBehaviour {
         gameInfoScript.Show();
     }
 
+    public void addPlayer(string playerName) {
+        if (Players == null) {
+            Players = new List<String>();
+        }
+        Players.Add(playerName);
+    }
+
+    public void addPlayerInfo(string playerName, string playerStatus) {
+        if (PlayerInfos == null) {
+            PlayerInfos = new List<KeyValuePair<string, string>>();
+        }
+        PlayerInfos.Add(new KeyValuePair<string, string>(playerName, playerStatus));
+    }
+
     public string gameStatus;
 
     private void SetColor(string status) {
@@ -98,8 +119,7 @@ public class OnlineGameScript : MonoBehaviour {
         } else if ("INVITED".Equals(status)) {
             image.color = statusColors[4];
         } else if ("ACTIVE".Equals(status)) {
-            Int32.TryParse(CurrentPlayer, out int currentPlayerId);
-            if (currentPlayerId == Database.Instance.GetSignedInUser().Key) {
+            if (CurrentPlayer != null && CurrentPlayer.Equals(Database.Instance.GetSignedInUser().Value)) {
                 image.color = statusColors[2];
             } else {
                 image.color = statusColors[1];
@@ -114,10 +134,6 @@ public class OnlineGameScript : MonoBehaviour {
     }
 
     public void SetGameStatusText() {
-        SetGameStatusText("");
-    }
-
-    public void SetGameStatusText(string extraInfo) {
         if ("PENDING".Equals(GameStatus)) {
             gameStatusText.gameObject.GetComponent<TextLocalization>().key = PENDING;
             gameStatusText.text = LocalizationManager.Instance.GetText(PENDING);
@@ -131,7 +147,7 @@ public class OnlineGameScript : MonoBehaviour {
         } else if ("OTHERS_TURN".Equals(GameStatus)) {
             gameStatusText.gameObject.GetComponent<TextLocalization>().key = OTHERS_TURN;
             string message = LocalizationManager.Instance.GetText(OTHERS_TURN);
-            gameStatusText.text = String.Format(message, extraInfo);
+            gameStatusText.text = String.Format(message, CurrentPlayer);
             gameTitleText.gameObject.GetComponent<TextLocalization>().key = "NOT_YOUR_TURN";
             SetTitleText(LocalizationManager.Instance.GetText("NOT_YOUR_TURN"));
         } else if ("DECLINED".Equals(GameStatus)) {
@@ -147,7 +163,7 @@ public class OnlineGameScript : MonoBehaviour {
         } else if ("ACTIVE".Equals(GameStatus)) {
             TextLocalization textLocalization = gameStatusText.gameObject.GetComponent<TextLocalization>();
             textLocalization.key = ACTIVE;
-            textLocalization.SetReplaceText(extraInfo);
+            textLocalization.SetReplaceText(CurrentPlayer);
             gameTitleText.gameObject.GetComponent<TextLocalization>().key = ACTIVE_TITLE;
             gameTitleText.text = LocalizationManager.Instance.GetText(ACTIVE_TITLE);
         } else { 

+ 1 - 1
Assets/Scripts/NewGameScene/invitePanelController.cs

@@ -10,7 +10,7 @@ public class invitePanelController : MonoBehaviour {
     // Start is called before the first frame update
     void Start() {
         inviteButton.onClick.AddListener(OpenInvitePlayersDialog);
-        invitedPlayersText.text = 1 + " " + LocalizationManager.Instance.GetText("INVITED_PLAYERS_TEXT");
+        invitedPlayersText.text = LocalizationManager.Instance.GetText("INVITED_PLAYERS_TEXT_START");
     }
 
     // Update is called once per frame

+ 23 - 4
Assets/SelectCategoryScript.cs

@@ -15,6 +15,7 @@ public class SelectCategoryScript : MonoBehaviour
     [SerializeField] GameObject SelectCategoryPanel;
 
     [SerializeField] GameObject ContentPanel;
+    [SerializeField] Text TotalsText;
     // Start is called before the first frame update
 
     private List<CategoryPanel.Category> categories;
@@ -25,12 +26,15 @@ public class SelectCategoryScript : MonoBehaviour
 
         GetCategories();
 
+        updateTotalsText();
+
         int pos = 0;
         foreach (CategoryPanel.Category cat in categories)
         {
             GameObject go = Instantiate(CategoryToSelectPrefab, Vector3.zero, Quaternion.identity);
             CategorySelection c = go.GetComponent<CategorySelection>();
             c.SetSelected(true);
+            c.QuestionCount = cat.questionCount;
             c.SetCategoryText(cat.name, cat.questionCount);
             c.transform.SetSiblingIndex(pos++);
             c.transform.localScale = new Vector3(1, 1, 1);
@@ -38,6 +42,16 @@ public class SelectCategoryScript : MonoBehaviour
         }
     }
 
+    private void Update() {
+        updateTotalsText();
+    }
+
+    private void updateTotalsText() {
+        string totalsText = String.Format(LocalizationManager.Instance.GetText(TotalsText.GetComponent<TextLocalization>().key), 
+            GetSelectedCategoriesQuestionCount().ToString());
+        TotalsText.text = totalsText;
+    }
+
     private void GetCategories()
     {
         if (categories == null || categories.Count == 0) {
@@ -47,14 +61,14 @@ public class SelectCategoryScript : MonoBehaviour
     }
 
     internal void CloseDialogAction() {
-        SelectCategoryPanel.GetComponent<selectCategoriesPanelController>().UpdateCategoryText();
+        SelectCategoryPanel.GetComponent<selectCategoriesPanelController>().UpdateCategoryText(GetSelectedCategoriesQuestionCount());
         gameObject.SetActive(false);
-
     }
 
     internal int GetSelectedCategoriesQuestionCount()
     {
-        return 0;
+        IEnumerable<CategorySelection> selectedCategories = ContentPanel.GetComponentsInChildren<CategorySelection>().Where(c => c.isSelected());
+        return selectedCategories.Sum(c => c.QuestionCount);
     }
 
     internal string GetCategoriesSelectedCount()
@@ -82,7 +96,12 @@ public class SelectCategoryScript : MonoBehaviour
         GetCategories();
         List<string> categoriesName = categories.Select(c1 => c1.name).ToList();
         List<string> selectedCategoyNames = GetSelectedCategoriesAsList().Select(c2 => c2.getCategoryName()).ToList();
-        List<string> names = categoriesName.Intersect(selectedCategoyNames).ToList();
+        List<string> names = new List<string>();
+        if (selectedCategoyNames.Count == 0) {
+            names = categoriesName;
+        } else {
+            names = categoriesName.Intersect(selectedCategoyNames).ToList();
+        }
 
         return categories.Where(c => names.Contains(c.name)).ToList();
     }

+ 6 - 2
Assets/Translations/ENGLISH.xml

@@ -68,6 +68,7 @@
   <text key="INVITE_PANEL_DIALOG_BUTTON">Done</text>
   <text key="INVITE_COUNT_TEXT">Invite {0} players</text>
   <text key="INVITED_PLAYERS_TEXT">players invited</text>
+  <text key="INVITED_PLAYERS_TEXT_START">Invite players</text>
   <text key="NEED_MORE_INPUT">More input needed</text>
   <text key="REGISTER_ERROR_USERNAME_EMPTY">Username is obligatory and needs to be atleast 3 characters long</text>
   <text key="REGISTER_ERROR_PASSWORD_EMPTY">Password is obligatory and needs to be atleast 6 characters long</text>
@@ -98,7 +99,8 @@
   <text key="NOT_YOUR_TURN">It's not your turn</text>
   <text key="FCM_NEW_GAME_MESSAGE">You have been invited to a new game with {0}</text>
   <text key="FCM_NEW_GAME_TITLE">Want to play a game?</text>
-  <text key="SELECT_CATEGORIES_TEXT">{0} categories chosen</text>
+  <text key="SELECT_CATEGORIES_TEXT">{0} categories chosen {1} questions</text>
+  <text key="SELECT_CATEGORIES_TEXT_ALL">{0} categories chosen</text>
   <text key="SELECT_CATEGORIES_BUTTON">Select categories</text>
   <text key="SELECT_CATEGORIES_DIALOG_TITLE">Select categories to play with</text>
   <text key="SELECT_CATEGORY_DIALOG_TEXT">Categoryname</text>
@@ -106,6 +108,8 @@
   <text key="ANSWERLINE_INFO_LOCKED_QUESTIONS_TEXT">{0} have {1} locked answers</text>
   <text key="ANSWERLINE_INFO_UNLOCKED_QUESTIONS_TEXT">{0} have {1} unlocked answers, those will be lost if you answer incorrectly.</text>
   <text key="ANSWERLINE_OTHER_PLAYER">Show {0} answers</text>
+  <text key="SELECT_CATEGORIES_TOTALS">{0} total questions selected</text>
 
-  
+  <text key="GAME_OVER_MESSAGE">{0} won the game after {1} rounds</text>
+  <text key="GAME_OVER_TITLE">Game over!</text>
 </Language>

+ 6 - 3
Assets/Translations/SWEDISH.xml

@@ -69,6 +69,7 @@
   <text key="INVITE_PANEL_DIALOG_BUTTON">Färdig</text>
   <text key="INVITE_COUNT_TEXT">Bjud in {0} spelare</text>
   <text key="INVITED_PLAYERS_TEXT">spelare inbjudna</text>
+  <text key="INVITED_PLAYERS_TEXT_START">Bjud in spelare</text>
   <text key="NEED_MORE_INPUT">Skriv in fler tecken</text>
   <text key="REGISTER_ERROR_USERNAME_EMPTY">Användarnamn är obligatoriskt, minst 3 tecken långt</text>
   <text key="REGISTER_ERROR_PASSWORD_EMPTY">Lösenord är obligatoriskt, minst 6 tecken långt</text>
@@ -100,14 +101,16 @@
   <text key="FCM_NEW_GAME_MESSAGE">Du är inbjuden till ett nytt spel mot {0}</text>
   <text key="FCM_NEW_GAME_TITLE">Vill du spela?</text>
   <text key="SELECT_CATEGORIES_BUTTON">Välj kategorier</text>
-  <text key="SELECT_CATEGORIES_TEXT">{0} kategorier valda</text>
+  <text key="SELECT_CATEGORIES_TEXT">{0} kategorier valda {1} frågor</text>
+  <text key="SELECT_CATEGORIES_TEXT_ALL">{0} kategorier valda</text>
   <text key="SELECT_CATEGORIES_DIALOG_TITLE">Välj kategorier att spela med</text>
   <text key="SELECT_CATEGORY_DIALOG_TEXT">Kategorinamn</text>
   <text key="SELECT_CATEGORY_DIALOG_SELECTED_TEXT">Vald</text>
   <text key="ANSWERLINE_INFO_LOCKED_QUESTIONS_TEXT">{0} har {1} låsta frågor</text>
   <text key="ANSWERLINE_INFO_UNLOCKED_QUESTIONS_TEXT">Du har {0} olåsta frågor, dessa kommer att förloras om du svarar fel.</text>
-
   <text key="ANSWERLINE_OTHER_PLAYER">Visa {0} svar</text>
-
+  <text key="SELECT_CATEGORIES_TOTALS">Totalt {0} frågor valda</text>
   
+  <text key="GAME_OVER_MESSAGE">{0} vann spelet efter {1} rundor</text>
+  <text key="GAME_OVER_TITLE">Spelet avslutat</text>
 </Language>

BIN
Assets/narKampenLocal.db


+ 11 - 5
Assets/selectCategoriesPanelController.cs

@@ -11,14 +11,18 @@ public class selectCategoriesPanelController : MonoBehaviour
     [SerializeField] GameObject SelectCategoriesDialog;
     [SerializeField] Text SelectCategoriesText;
 
+    private int selectedQuestionCount;
+
     private SelectCategoryScript selectCategoryScript;
 
+    public int SelectedQuestionCount { get => selectedQuestionCount; set => selectedQuestionCount = value; }
+
     // Start is called before the first frame update
     void Start()
     {
         OpenDialogButton.onClick.AddListener(ShowDialog);
         selectCategoryScript = SelectCategoriesDialog.GetComponent<SelectCategoryScript>();
-        SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT"), 
+        SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT_ALL"), 
             LocalizationManager.Instance.GetText("ALL"));
     }
 
@@ -26,13 +30,16 @@ public class selectCategoriesPanelController : MonoBehaviour
     void Update()
     {
         if (SelectCategoriesText.text.Contains("{")) {
-            SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT"), 
+            SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT_ALL"), 
                 LocalizationManager.Instance.GetText("ALL"));
         }
     }
 
-    public void UpdateCategoryText() {
-        SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT"), selectCategoryScript.GetCategoriesSelectedCount());
+    public void UpdateCategoryText(int questionCount) {
+        SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT"), 
+            selectCategoryScript.GetCategoriesSelectedCount(), 
+            questionCount);
+            SelectedQuestionCount = questionCount;
     }
 
     internal void ShowDialog() {
@@ -41,7 +48,6 @@ public class selectCategoriesPanelController : MonoBehaviour
 
     public List<CategoryPanel.Category> GetSelectedCategories() {
         List<CategoryPanel.Category> selectedCategories = selectCategoryScript.GetSelectedCategories();
-
         return selectedCategories;
     }
 }

+ 3 - 3
ProjectSettings/ProjectSettings.asset

@@ -121,7 +121,7 @@ PlayerSettings:
     16:10: 1
     16:9: 1
     Others: 1
-  bundleVersion: 0.51
+  bundleVersion: 0.53
   preloadedAssets: []
   metroInputSource: 0
   wsaTransparentSwapchain: 0
@@ -167,9 +167,9 @@ PlayerSettings:
   applicationIdentifier:
     Android: se.axelnordh.narkampen
   buildNumber: {}
-  AndroidBundleVersionCode: 23
+  AndroidBundleVersionCode: 25
   AndroidMinSdkVersion: 19
-  AndroidTargetSdkVersion: 0
+  AndroidTargetSdkVersion: 30
   AndroidPreferredInstallLocation: 1
   aotOptions: 
   stripEngineCode: 1

+ 1 - 0
ProjectSettings/TagManager.asset

@@ -10,6 +10,7 @@ TagManager:
   - AnswerLine
   - ConfirmAnswerDialogTag
   - Root
+  - GamesPanelContent
   layers:
   - Default
   - TransparentFX

+ 3 - 1
dbFiles/FCMMessageing.php

@@ -19,13 +19,13 @@
 		die("Connection Failed. ". mysqli_connect_error());
 	}
 	mysqli_set_charset($conn,'utf8');
-	
 	$messageType = $conn->real_escape_string(isset($_POST['type'])?$_POST['type']:"");
 	
 	$title = $conn->real_escape_string($_POST['title']);
 	$messageToSend = $conn->real_escape_string($_POST['message']);
 	$gameId = $conn->real_escape_string($_POST['gameId']);
 	
+	file_put_contents("FCMMessageDebug.log", "Called $messageType at " . Date(), FILE_APPEND);
 	if ($messageType === "FCMNextPlayer") {
 		$playerName = $conn->real_escape_string($_POST['playerName']);
 		$token = getToken($conn, $gameId, $playerName);
@@ -78,4 +78,6 @@
 		];
 		// Send the Push Notification - use $response to inspect success or errors
 		$response = $httpClient->post("https://fcm.googleapis.com/v1/projects/{$project}/messages:send", ['json' => $message]);
+
+		file_put_contents("FCMMessageDebugResponse.log", print_r($response,true), FILE_APPEND);
 	}

+ 18 - 7
dbFiles/OnlineGames.php

@@ -18,11 +18,20 @@
 	$userId = $conn->query("SELECT id FROM users where username = '$userName'")->fetch_assoc()['id'];
 	
 	if ($callFunction === "list"){	
-		$sql = "SELECT game.*, users.username as playerToAct FROM game " .
+		/* OLD SQL
+		 $sql = "SELECT game.*, users.username as playerToAct FROM game " .
 				"LEFT JOIN users on currentPlayer = users.id " .
 				"WHERE game.id IN (SELECT gameId FROM gamePlayers WHERE playerId = $userId) " .
 				"AND game.status != 'FINISHED' ".
 				"ORDER BY FIELD(PlayerToAct, '$userName') DESC, lastPlayedDate DESC";
+*/
+
+		$sql = "SELECT game.*, users.id as userId, users.username as username, gamePlayers.userLockedQuestions, gamePlayers.status playerStatus FROM game " . 
+			"INNER JOIN gamePlayers ON gamePlayers.gameId = game.id " . 
+			"INNER JOIN users ON users.id = playerId " .
+			"WHERE game.id IN (SELECT gameId FROM gamePlayers WHERE playerId = $userId) " .
+			"AND game.status NOT IN ('FINISHED') " .
+			"ORDER BY FIELD(currentPlayer, $userId) DESC, lastPlayedDate DESC";
 		$result = $conn->query($sql);
 
 		if ($result->num_rows > 0) {
@@ -47,12 +56,14 @@
 		} else {
 			$sql = "SELECT count(*) as c FROM gamePlayers WHERE gameId = $gameId AND status NOT LIKE 'DECLINED'";
 			$result = $conn->query($sql);
-			while ($data = $result->fetch_assoc()) { // TODO Kommer ge fel om man inte har några spel kvar i listan.
-				if ($data['c'] == 1) { // Alla utom den som startade spelet har nekat, ta bort spelet från game
-					$sql = "DELETE FROM game WHERE id = $gameId";
-					$result = $conn->query($sql);
-					if (!$result) {
-						echo "UPDATE game status failed " . $conn->error;
+			if ($result !== false) {
+				while ($data = $result->fetch_assoc()) {
+					if ($data['c'] == 1) { // Alla utom den som startade spelet har nekat, ta bort spelet från game
+						$sql = "DELETE FROM game WHERE id = $gameId";
+						$result = $conn->query($sql);
+						if (!$result) {
+							echo "UPDATE game status failed " . $conn->error;
+						}
 					}
 				}
 			}

+ 37 - 15
dbFiles/PlayerSearch.php

@@ -12,23 +12,45 @@
 	}
 	mysqli_set_charset($conn,'utf8');
 	
-	$searchString = $conn->real_escape_string($_GET['search']);
-	
-	$sql = "SELECT id, username FROM users WHERE username LIKE '%$searchString%' LIMIT 20";
-	
-	$result = mysqli_query($conn, $sql);
-	
-	$json = array();
-	
-	if (mysqli_num_rows($result) > 0) {
-		while ($row = mysqli_fetch_assoc($result)) {
-			$json[] = array('id' => $row['id'],
+	$function = $_POST["f"];
+
+	if ($function === "PlayerSearch") {
+		$searchString = $_POST["SearchString"];
+		
+		$sql = "SELECT id, username FROM users WHERE username LIKE '%$searchString%' LIMIT 20";
+		
+		$result = mysqli_query($conn, $sql);
+		
+		$json = array();
+		
+		if (mysqli_num_rows($result) > 0) {
+			while ($row = mysqli_fetch_assoc($result)) {
+				$json[] = array('id' => $row['id'],
 				'username' => $row['username']);
+			}
+			$jsonString = json_encode($json);
+			echo $jsonString;
+		} else {
+			echo "";
+		}
+	} else if ($function === "FindRandomPlayers") {
+		$currentPlayerId = $_POST['playerId'];
+		$sql = "SELECT id, username FROM users WHERE id != $currentPlayerId ORDER BY RAND() LIMIT 10";
+
+		$result = mysqli_query($conn, $sql);
+		if (mysqli_num_rows($result) > 0) {
+			$json = array();
+			while ($row = mysqli_fetch_assoc($result)) {
+				$json[] = array('id' => $row["id"],
+				'username' => $row["username"]);
+			}
+
+			echo json_encode($json);
+		} else {
+			echo "";
 		}
-		$jsonString = json_encode($json);
-		echo $jsonString;
 	} else {
-		echo "";
+		echo "No Function Found";
 	}
-
+		
 ?>