Browse Source

Category selection into newGame

Axel Nordh 5 years ago
parent
commit
d8d0a5961a

+ 17 - 0
Assets/CategorySelection.cs

@@ -19,4 +19,21 @@ public class CategorySelection : MonoBehaviour
     {
         
     }
+
+    internal void SetCategoryText(string categoryName, int questionCount) {
+        CategoryNameText.text = categoryName + " (" + questionCount + ")";
+    }
+
+    internal void SetSelected(bool selected) {
+        selectionToggle.SetIsOnWithoutNotify(selected);
+    }
+
+    public string getCategoryName() {
+        string catText = CategoryNameText.text;
+        return catText.Substring(0, catText.IndexOf('(') - 1);
+    }
+
+    public bool isSelected() {
+        return selectionToggle.isOn;
+    }
 }

+ 3 - 3
Assets/Prefab/CategorySelectionPrefab.prefab

@@ -61,13 +61,13 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+  m_Color: {r: 0.7960785, g: 0.7960785, b: 0.7960785, a: 0}
   m_RaycastTarget: 1
   m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Sprite: {fileID: 0}
   m_Type: 1
   m_PreserveAspect: 0
   m_FillCenter: 1
@@ -321,7 +321,7 @@ MonoBehaviour:
     m_BestFit: 1
     m_MinSize: 10
     m_MaxSize: 18
-    m_Alignment: 4
+    m_Alignment: 3
     m_AlignByGeometry: 0
     m_RichText: 1
     m_HorizontalOverflow: 0

+ 46 - 42
Assets/Scenes/NewGame.unity

@@ -589,9 +589,9 @@ RectTransform:
   m_Father: {fileID: 1153317459}
   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: 189.99998, y: -172.49998}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 160, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &40152847
@@ -1514,7 +1514,7 @@ RectTransform:
   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: 0.4, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 10, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -3629,9 +3629,9 @@ RectTransform:
   m_Father: {fileID: 1153317459}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 569.99994, y: -172.49998}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 160, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &518841083
@@ -3746,7 +3746,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &520705535
 RectTransform:
   m_ObjectHideFlags: 0
@@ -3851,6 +3851,7 @@ MonoBehaviour:
   correctsToWinSlider: {fileID: 2113837562}
   invitePanel: {fileID: 97177669}
   StartButton: {fileID: 1971064177}
+  categoryPanel: {fileID: 728032754}
 --- !u!1 &532138424
 GameObject:
   m_ObjectHideFlags: 0
@@ -5177,8 +5178,8 @@ RectTransform:
   m_Father: {fileID: 1149881454}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMin: {x: 0.2, y: 0}
+  m_AnchorMax: {x: 0.2, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -5255,10 +5256,10 @@ RectTransform:
   m_Father: {fileID: 520705535}
   m_RootOrder: 3
   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: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 379.99997, y: -105}
+  m_SizeDelta: {x: 759.99994, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &728032756
 MonoBehaviour:
@@ -5854,10 +5855,10 @@ RectTransform:
   m_Father: {fileID: 520705535}
   m_RootOrder: 5
   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: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 379.99997, y: -165}
+  m_SizeDelta: {x: 759.99994, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &790601790
 MonoBehaviour:
@@ -6102,10 +6103,10 @@ RectTransform:
   m_Father: {fileID: 520705535}
   m_RootOrder: 4
   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: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 379.99997, y: -135}
+  m_SizeDelta: {x: 759.99994, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &814886780
 MonoBehaviour:
@@ -6607,7 +6608,7 @@ RectTransform:
   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: 0.2, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 10, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -8183,7 +8184,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &1153317459
 RectTransform:
   m_ObjectHideFlags: 0
@@ -8899,10 +8900,10 @@ RectTransform:
   m_Father: {fileID: 520705535}
   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: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 379.99997, y: -15}
+  m_SizeDelta: {x: 759.99994, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1257082024
 MonoBehaviour:
@@ -9070,8 +9071,8 @@ RectTransform:
   m_Father: {fileID: 1434378585}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMin: {x: 0.4, y: 0}
+  m_AnchorMax: {x: 0.4, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -9948,8 +9949,11 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   doneButton: {fileID: 1530473171}
+  closeButton: {fileID: 860429331}
   CategoryToSelectPrefab: {fileID: 1371924421486162242, guid: 0db0465e0b7d9ed4898de28a6b83a1b7,
     type: 3}
+  SelectCategoryPanel: {fileID: 728032754}
+  ContentPanel: {fileID: 1596031693}
 --- !u!114 &1437860097
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -11208,7 +11212,7 @@ RectTransform:
   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: 0.33333334, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 10, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -11401,10 +11405,10 @@ RectTransform:
   m_Father: {fileID: 520705535}
   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: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 379.99997, y: -45}
+  m_SizeDelta: {x: 759.99994, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1793399478
 MonoBehaviour:
@@ -12030,7 +12034,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 1, y: 1}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0}
+  m_AnchoredPosition: {x: -5, y: 0}
   m_SizeDelta: {x: 90, y: 30}
   m_Pivot: {x: 1, y: 1}
 --- !u!114 &1952648064
@@ -12914,10 +12918,10 @@ RectTransform:
   m_Father: {fileID: 520705535}
   m_RootOrder: 2
   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: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 379.99997, y: -75}
+  m_SizeDelta: {x: 759.99994, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1988690286
 MonoBehaviour:
@@ -13439,8 +13443,8 @@ RectTransform:
   m_Father: {fileID: 905928013}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMin: {x: 0.33333334, y: 0}
+  m_AnchorMax: {x: 0.33333334, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}

+ 2 - 1
Assets/Scripts/Database/OnlineDatabase.cs

@@ -46,7 +46,7 @@ public class OnlineDatabase : MonoBehaviour {
         return list;
     }
 
-    internal int SetupNewOnlineGame(int limitPerQuestion, int limitPerPlayer, int toWin, List<InviteSearchResult> inviteUsers) {
+    internal int SetupNewOnlineGame(int limitPerQuestion, int limitPerPlayer, int toWin, List<InviteSearchResult> inviteUsers, List<int> selectedCategories) {
         List<int> playerIds = new List<int>();
         inviteUsers.ForEach(i => playerIds.Add(i.GetId()));
         int currentUser = Database.Instance.GetSignedInUser().Key;
@@ -58,6 +58,7 @@ public class OnlineDatabase : MonoBehaviour {
         form.AddField("limitPerQuestion", limitPerQuestion);
         form.AddField("limitPerPlayer", limitPerPlayer);
         form.AddField("playerIds", String.Join(",", playerIds));
+        form.AddField("categoryIds", String.Join(",", selectedCategories));
 
         string response = CallOnlineDatabaseWithResponse("NewOnlineGame.php", form);
 

+ 77 - 70
Assets/Scripts/NewGameScene/NewOnlineGame.cs

@@ -1,70 +1,77 @@
-using System;
-using System.Collections.Generic;
-using System.Text.RegularExpressions;
-using UnityEngine;
-using UnityEngine.UI;
-
-public class NewOnlineGame : MonoBehaviour
-{
-
-    public Button inviteButton;
-    public Button startButton;
-
-    public InputField correctAnswersToWin;
-    public InputField timeLimitPerQuestion;
-    public InputField timeLimitPerPlayer;
-
-    Text invitedCountText;
-    InvitePanelScript ips;
-
-    // Start is called before the first frame update
-    void Start()
-    {
-        //inviteButton.onClick.AddListener(OpenInvitePanel);
-        startButton.onClick.AddListener(StartNewGame);
-        invitedCountText = GameObject.Find("InvitedCountText").GetComponent<Text>();
-    }
-
-    private void Update() {
-        if (ips == null) {
-            ips = GameObject.Find("InvitePanel").GetComponent<InvitePanelScript>();
-        }
-
-        if (ips.AreThereInvites()) {
-            invitedCountText.GetComponent<CanvasGroup>().alpha = 1f;
-            string text = LocalizationManager.Instance.GetText("INVITE_COUNT_TEXT");
-            int invitedCount = ips.InvitedCount();
-            text = String.Format(text, invitedCount.ToString());
-            invitedCountText.text = text;
-            startButton.interactable = true;
-        }
-    }
-
-    private void StartNewGame() {
-        // Collect all information for new game;
-        // Send to Database;
-        int timeLimitQuestion = GetInputFieldValue(timeLimitPerQuestion);
-        int timeLimitPlayer = GetInputFieldValue(timeLimitPerPlayer);
-        int correctToWin = GetInputFieldValue(correctAnswersToWin);
-        List<InviteSearchResult> inviteUsers = ips.GetSelectedUsersForInvite();
-        int newGameId = OnlineDatabase.Instance.SetupNewOnlineGame(timeLimitQuestion, timeLimitPlayer, correctToWin, inviteUsers);
-        List<String> invitePlayerNames = new List<String>();
-        foreach (InviteSearchResult isr in inviteUsers) {
-            invitePlayerNames.Add(isr.GetName());
-        }
-        OnlineDatabase.Instance.SendInviteForNewGame(newGameId, invitePlayerNames, Database.Instance.GetSignedInUser().Value);
-    }
-
-    private int GetInputFieldValue(InputField inputField) {
-        int returnValue = 0;
-        if (inputField.text.Equals("")) {
-            string text = Regex.Match(inputField.placeholder.GetComponent<Text>().text, @"\d+").Value;
-            Int32.TryParse(text, out returnValue);
-        } else {
-            string text = Regex.Match(inputField.text, @"\d+").Value;
-            Int32.TryParse(text, out returnValue);
-        }
-
-        return returnValue;
-    }
-}
+using System;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using UnityEngine;
+using UnityEngine.UI;
+using System.Linq;
+
+public class NewOnlineGame : MonoBehaviour
+{
+
+    public Button inviteButton;
+    public Button startButton;
+
+    public InputField correctAnswersToWin;
+    public InputField timeLimitPerQuestion;
+    public InputField timeLimitPerPlayer;
+
+    Text invitedCountText;
+    InvitePanelScript ips;
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        //inviteButton.onClick.AddListener(OpenInvitePanel);
+        startButton.onClick.AddListener(StartNewGame);
+        invitedCountText = GameObject.Find("InvitedCountText").GetComponent<Text>();
+    }
+
+    private void Update() {
+        if (ips == null) {
+            ips = GameObject.Find("InvitePanel").GetComponent<InvitePanelScript>();
+        }
+
+        if (ips.AreThereInvites()) {
+            invitedCountText.GetComponent<CanvasGroup>().alpha = 1f;
+            string text = LocalizationManager.Instance.GetText("INVITE_COUNT_TEXT");
+            int invitedCount = ips.InvitedCount();
+            text = String.Format(text, invitedCount.ToString());
+            invitedCountText.text = text;
+            startButton.interactable = true;
+        }
+    }
+
+    private void StartNewGame() {
+        // Collect all information for new game;
+        // Send to Database;
+        int timeLimitQuestion = GetInputFieldValue(timeLimitPerQuestion);
+        int timeLimitPlayer = GetInputFieldValue(timeLimitPerPlayer);
+        int correctToWin = GetInputFieldValue(correctAnswersToWin);
+        List<InviteSearchResult> inviteUsers = ips.GetSelectedUsersForInvite();
+
+        List<int> selectedCategoryIds = GameObject.Find("SelectCategoresPanel").GetComponent<SelectCategoryScript>()
+            .GetSelectedCategories()
+            .Select(c => c.id)
+            .ToList();
+
+        int newGameId = OnlineDatabase.Instance.SetupNewOnlineGame(timeLimitQuestion, timeLimitPlayer, correctToWin, inviteUsers, selectedCategoryIds);
+        List<String> invitePlayerNames = new List<String>();
+        foreach (InviteSearchResult isr in inviteUsers) {
+            invitePlayerNames.Add(isr.GetName());
+        }
+        OnlineDatabase.Instance.SendInviteForNewGame(newGameId, invitePlayerNames, Database.Instance.GetSignedInUser().Value);
+    }
+
+    private int GetInputFieldValue(InputField inputField) {
+        int returnValue = 0;
+        if (inputField.text.Equals("")) {
+            string text = Regex.Match(inputField.placeholder.GetComponent<Text>().text, @"\d+").Value;
+            Int32.TryParse(text, out returnValue);
+        } else {
+            string text = Regex.Match(inputField.text, @"\d+").Value;
+            Int32.TryParse(text, out returnValue);
+        }
+
+        return returnValue;
+    }
+}

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

@@ -4,6 +4,7 @@ using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.SceneManagement;
 using UnityEngine.UI;
+using System.Linq;
 
 public class NewOnlineGameScript : MonoBehaviour
 {
@@ -13,7 +14,7 @@ public class NewOnlineGameScript : MonoBehaviour
     public GameObject invitePanel;
 
     [SerializeField] Button StartButton;
-    
+    [SerializeField] GameObject categoryPanel;
 
     private InvitePanelScript ips;
     // Start is called before the first frame update
@@ -35,7 +36,11 @@ public class NewOnlineGameScript : MonoBehaviour
 
     void StartNewOnlineGame() {
         List<InviteSearchResult> inviteUsers = ips.GetSelectedUsersForInvite();
-        OnlineDatabase.Instance.SetupNewOnlineGame((int)correctsToWinSlider.value, (int)daysToAnswerSlider.value, (int)correctsToWinSlider.value, inviteUsers);
+        List<CategoryPanel.Category> selectedCategories = categoryPanel.GetComponent<selectCategoriesPanelController>().GetSelectedCategories();
+
+        List<int> selectedCategoryIds = selectedCategories.Select(c => c.id).ToList();
+
+        OnlineDatabase.Instance.SetupNewOnlineGame((int)correctsToWinSlider.value, (int)daysToAnswerSlider.value, (int)correctsToWinSlider.value, inviteUsers, selectedCategoryIds);
         SceneManager.LoadScene("MainMenu");
     }
 }

+ 3 - 1
Assets/Scripts/NewGameScene/StartOnlineGameButton.cs

@@ -5,6 +5,8 @@ using UnityEngine;
 using UnityEngine.SceneManagement;
 using UnityEngine.UI;
 
+
+// Not used anymore, renamed to NewOnlineGameScript
 public class StartOnlineGameButton : MonoBehaviour
 {
     public Slider answerTimeSlider;
@@ -45,7 +47,7 @@ public class StartOnlineGameButton : MonoBehaviour
 
     void StartNewOnlineGame() {
         List<InviteSearchResult> inviteUsers = ips.GetSelectedUsersForInvite();
-        OnlineDatabase.Instance.SetupNewOnlineGame((int)correctsToWinSlider.value, (int)daysToAnswerSlider.value, (int)correctsToWinSlider.value, inviteUsers);
+        //OnlineDatabase.Instance.SetupNewOnlineGame((int)correctsToWinSlider.value, (int)daysToAnswerSlider.value, (int)correctsToWinSlider.value, inviteUsers);
         SceneManager.LoadScene("MainMenu");
     }
 }

+ 40 - 0
Assets/SelectCategoryScript.cs

@@ -3,6 +3,7 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
+using System.Linq;
 
 public class SelectCategoryScript : MonoBehaviour
 {
@@ -10,6 +11,10 @@ public class SelectCategoryScript : MonoBehaviour
     [SerializeField] Button doneButton;
     [SerializeField] Button closeButton;
     [SerializeField] GameObject CategoryToSelectPrefab;
+
+    [SerializeField] GameObject SelectCategoryPanel;
+
+    [SerializeField] GameObject ContentPanel;
     // Start is called before the first frame update
 
     private List<CategoryPanel.Category> categories;
@@ -27,11 +32,17 @@ public class SelectCategoryScript : MonoBehaviour
         {
             GameObject go = Instantiate(CategoryToSelectPrefab, Vector3.zero, Quaternion.identity);
             CategorySelection c = go.GetComponent<CategorySelection>();
+            c.SetSelected(true);
+            c.SetCategoryText(cat.name, cat.questionCount);
+            c.transform.localScale = new Vector3(1,1,1);
+            c.transform.SetParent(ContentPanel.transform, false);
         }
     }
 
     internal void CloseDialogAction() {
+        SelectCategoryPanel.GetComponent<selectCategoriesPanelController>().UpdateCategoryText();
         gameObject.SetActive(false);
+
     }
 
     internal int GetSelectedCategoriesQuestionCount()
@@ -39,6 +50,35 @@ public class SelectCategoryScript : MonoBehaviour
         return 0;
     }
 
+    internal string GetCategoriesSelectedCount()
+    {
+        string returnValue;
+        int selectionCount = GetSelectedCategoriesAsList().Count;
+
+        if (selectionCount == categories.Count)
+        {
+            returnValue = LocalizationManager.Instance.GetText("ALL");
+        }
+        else
+        {
+            returnValue = selectionCount.ToString();
+        }
+        return returnValue;
+    }
+
+    private List<CategorySelection> GetSelectedCategoriesAsList()
+    {
+        return ContentPanel.GetComponentsInChildren<CategorySelection>().Where(c => c.isSelected()).ToList();
+    }
+
+    public List<CategoryPanel.Category> GetSelectedCategories() {
+        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();
+
+        return categories.Where(c => names.Contains(c.name)).ToList();
+    }
+
     internal void ShowDialog()
     {
         gameObject.SetActive(true);

+ 1 - 0
Assets/Translations/ENGLISH.xml

@@ -4,6 +4,7 @@
   <text key="YES">Yes</text>
   <text key="NO">No</text>
   <text key="OK">Ok</text>
+  <text key="ALL">All</text>
   <text key="BEFORE">before</text>
   <text key="AFTER">after</text>
   <text key="LOGIN">Login</text>

+ 1 - 0
Assets/Translations/SWEDISH.xml

@@ -4,6 +4,7 @@
   <text key="YES">Ja</text>
   <text key="NO">Nej</text>
   <text key="OK">Ok</text>
+  <text key="ALL">Alla</text>
   <text key="BEFORE">före</text>
   <text key="AFTER">efter</text>
   <text key="LOGIN">Logga in</text>

BIN
Assets/narKampenLocal.db


+ 20 - 1
Assets/selectCategoriesPanelController.cs

@@ -10,19 +10,38 @@ public class selectCategoriesPanelController : MonoBehaviour
     [SerializeField] Button OpenDialogButton; 
     [SerializeField] GameObject SelectCategoriesDialog;
     [SerializeField] Text SelectCategoriesText;
+
+    private SelectCategoryScript selectCategoryScript;
+
     // 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"), 
+            LocalizationManager.Instance.GetText("ALL"));
     }
 
     // Update is called once per frame
     void Update()
     {
-        SelectCategoriesDialog.GetComponent<SelectCategoryScript>().GetSelectedCategoriesQuestionCount();
+        if (SelectCategoriesText.text.Contains("{")) {
+            SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT"), 
+                LocalizationManager.Instance.GetText("ALL"));
+        }
+    }
+
+    public void UpdateCategoryText() {
+        SelectCategoriesText.text = string.Format(LocalizationManager.Instance.GetText("SELECT_CATEGORIES_TEXT"), selectCategoryScript.GetCategoriesSelectedCount());
     }
 
     internal void ShowDialog() {
         SelectCategoriesDialog.SetActive(true);
     }
+
+    public List<CategoryPanel.Category> GetSelectedCategories() {
+        List<CategoryPanel.Category> selectedCategories = selectCategoryScript.GetSelectedCategories();
+
+        return selectedCategories;
+    }
 }

+ 64 - 63
dbFiles/NewOnlineGame.php

@@ -17,72 +17,73 @@
 	$limitPerPlayer = $_POST['limitPerPlayer'];
 	$playerIds = $_POST['playerIds'];
 	$currentUser = $_POST['currentUser'];
-	$functionName = $_POST['f'];
+	$categoryIds = $_POST['categoryIds'];
 	
-	if ($functionName === "NewGame") {
-		$playerIdsArray = explode(",",$playerIds);
-		$playerCount = count($playerIdsArray);
-		if ($playerCount == 1) {
-			$status = "STARTED";
+	$playerIdsArray = explode(",",$playerIds);
+	$playerCount = count($playerIdsArray);
+	if ($playerCount == 1) {
+		$status = "STARTED";
+	} else {
+		$status = "PENDING";
+	}
+	$sql = "INSERT INTO game(" .
+			"gameMode, " .
+			"status, " .
+			"winNumber, " .
+			"answerTimer, " .
+			"roundTimeLimit, " .
+			"numberOfPlayers, " .
+			"currentPlayer, " .
+			"round, " .
+			"startedDate) " .
+			"VALUES (" .
+			"'Online', " .
+			"'$status', " .
+			"$winNumber, " .
+			"$limitPerQuestion, " .
+			"$limitPerPlayer, " .
+			"$playerCount, " .
+			"(SELECT id FROM users WHERE id IN ($playerIds) ORDER BY RAND() LIMIT 1), " .
+			"1, " .
+			"NOW())";
+	
+	$result = mysqli_query($conn, $sql);
+	$error = mysqli_error($conn);
+	if ($error !== "") {
+		echo $error;
+	}
+	$gameId = mysqli_insert_id($conn);
+	$playerPartInsertSql = "";
+	foreach ($playerIdsArray AS $playerId) {
+		if ($currentUser == $playerId) {
+			$playerPartInsertSql .= "($gameId, $playerId, 1, 1, 'ACCEPTED'),";
 		} else {
-			$status = "PENDING";
-		}
-		$sql = "INSERT INTO game(" .
-				"gameMode, " .
-				"status, " .
-				"winNumber, " .
-				"answerTimer, " .
-				"roundTimeLimit, " .
-				"numberOfPlayers, " .
-				"currentPlayer, " .
-				"round, " .
-				"startedDate) " .
-				"VALUES (" .
-				"'Online', " .
-				"'$status', " .
-				"$winNumber, " .
-				"$limitPerQuestion, " .
-				"$limitPerPlayer, " .
-				"$playerCount, " .
-				"(SELECT id FROM users WHERE id IN ($playerIds) ORDER BY RAND() LIMIT 1), " .
-				"1, " .
-				"NOW())";
-		
-		$result = mysqli_query($conn, $sql);
-		$error = mysqli_error($conn);
-		if ($error !== "") {
-			echo $error;
+			$playerPartInsertSql .= "($gameId, $playerId, 1, 1, 'WAITING'),";
 		}
-		$gameId = mysqli_insert_id($conn);
-		$playerPartInsertSql = "";
-		foreach ($playerIdsArray AS $playerId) {
-			if ($currentUser == $playerId) {
-				$playerPartInsertSql .= "($gameId, $playerId, 1, 1, 'ACCEPTED'),";
-			} else {
-				$playerPartInsertSql .= "($gameId, $playerId, 1, 1, 'WAITING'),";
-			}
-		}
-		$playerPartInsertSql = rtrim($playerPartInsertSql,",");
-		$playerSql = "INSERT INTO gamePlayers (gameId, playerId, userLockedQuestions, questionsLost, status) VALUES $playerPartInsertSql";
-		
-		$result = mysqli_query($conn,$playerSql);
-		$error = mysqli_error($conn);
-		
-		echo $gameId;
-		if ($error !== "") {
-			echo $error . " from sql " . $playerSql;
-		}
-	} else if ($functionName === "GetCategories") {
-		$sql = "SELECT category.name as name, count(*) as num FROM questions INNER JOIN questionToCategory ON questions.id = questionToCategory.questionId INNER JOIN category ON questionToCategory.categoryId = category.id GROUP BY category.name"
-		$result = $conn->query($sql);
-		$json = array();
-		$jsonString = ""; 
-		while ($row = $result->fetch_assoc()) {
-			$json = array('name' => $row['name'],
-						'value' => $row['value']);
-			$jsonString = json_encode($json);
-		}
-		echo $jsonString;
+	}
+	$playerPartInsertSql = rtrim($playerPartInsertSql,",");
+	$playerSql = "INSERT INTO gamePlayers (gameId, playerId, userLockedQuestions, questionsLost, status) VALUES $playerPartInsertSql";
+	
+	$result = mysqli_query($conn,$playerSql);
+	$error = mysqli_error($conn);
+
+	if ($error !== "") {
+		echo $error . " from sql " . $playerSql;
+	}
+
+	$categoryValues = "";
+	foreach ($categoryIds AS $catId) {
+		$categoryValues .= "($gameId, $catId),";
+	}
+	$categoryValues = rtrim($categoryValues, ",");
+	$categorySql = "INSERT INTO gameCategory(gameId, categoryId) VALUES $categoryValues";
+
+	$result = mysqli_query($conn, $categorySql);
+	$error = mysqli_error($conn);
+	
+	if ($error !== "") {
+		echo $error . " from sql " . $categorySql;
 	}
 
+	echo $gameId;
 ?>