From 15618360df4c3a8409b65f0f2bc9a3fb52d5d221 Mon Sep 17 00:00:00 2001
From: Saul Sayers <saulsayers@gmail.com>
Date: Sat, 15 Apr 2023 13:03:30 +0700
Subject: [PATCH] integrate scoreboard

---
 Assets/Prefabs/LocalScoreBoardCanvas.prefab   | 113 +----------
 Assets/Scenes/LocalScoreBoard.unity           | 185 +++++++++---------
 Assets/Scripts/Managers/LeaderboardManager.cs |  48 -----
 .../Managers/LeaderboardManager.cs.meta       |  11 --
 Assets/Scripts/Managers/ScoreBoardManager.cs  |  63 +++++-
 5 files changed, 150 insertions(+), 270 deletions(-)
 delete mode 100644 Assets/Scripts/Managers/LeaderboardManager.cs
 delete mode 100644 Assets/Scripts/Managers/LeaderboardManager.cs.meta

diff --git a/Assets/Prefabs/LocalScoreBoardCanvas.prefab b/Assets/Prefabs/LocalScoreBoardCanvas.prefab
index e0637b3..397dc28 100644
--- a/Assets/Prefabs/LocalScoreBoardCanvas.prefab
+++ b/Assets/Prefabs/LocalScoreBoardCanvas.prefab
@@ -588,8 +588,7 @@ RectTransform:
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
-  m_Children:
-  - {fileID: 3421564380825088160}
+  m_Children: []
   m_Father: {fileID: 757445291740208358}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -817,7 +816,7 @@ GameObject:
   - component: {fileID: 1867618750032795262}
   - component: {fileID: 1867618750032795257}
   m_Layer: 5
-  m_Name: Date
+  m_Name: Score
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -884,7 +883,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: Date
+  m_Text: Score
 --- !u!1 &1867618750533203121
 GameObject:
   m_ObjectHideFlags: 0
@@ -976,7 +975,7 @@ GameObject:
   - component: {fileID: 1867618750587678501}
   - component: {fileID: 1867618750587678500}
   m_Layer: 5
-  m_Name: Score
+  m_Name: Name
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -1043,7 +1042,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: Score
+  m_Text: Name
 --- !u!1 &1867618751381683968
 GameObject:
   m_ObjectHideFlags: 0
@@ -1124,105 +1123,3 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: No.
---- !u!1001 &4725594349178682031
-PrefabInstance:
-  m_ObjectHideFlags: 0
-  serializedVersion: 2
-  m_Modification:
-    m_TransformParent: {fileID: 757445291660857971}
-    m_Modifications:
-    - target: {fileID: 4488700541150533567, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_Name
-      value: LocalScoreBoardItem
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_Pivot.x
-      value: 0.5
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_Pivot.y
-      value: 0.5
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_RootOrder
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_AnchorMax.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_AnchorMax.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_AnchorMin.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_AnchorMin.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_SizeDelta.x
-      value: 724
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_SizeDelta.y
-      value: 46
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalPosition.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalPosition.z
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalRotation.w
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalRotation.x
-      value: -0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalRotation.y
-      value: -0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalRotation.z
-      value: -0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_AnchoredPosition.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_AnchoredPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalEulerAnglesHint.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalEulerAnglesHint.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-      propertyPath: m_LocalEulerAnglesHint.z
-      value: 0
-      objectReference: {fileID: 0}
-    m_RemovedComponents: []
-  m_SourcePrefab: {fileID: 100100000, guid: e4e81bd14816011489dcb558784f7512, type: 3}
---- !u!224 &3421564380825088160 stripped
-RectTransform:
-  m_CorrespondingSourceObject: {fileID: 7993741629831121423, guid: e4e81bd14816011489dcb558784f7512, type: 3}
-  m_PrefabInstance: {fileID: 4725594349178682031}
-  m_PrefabAsset: {fileID: 0}
diff --git a/Assets/Scenes/LocalScoreBoard.unity b/Assets/Scenes/LocalScoreBoard.unity
index 2eb1156..0dde6c8 100644
--- a/Assets/Scenes/LocalScoreBoard.unity
+++ b/Assets/Scenes/LocalScoreBoard.unity
@@ -38,7 +38,7 @@ RenderSettings:
   m_ReflectionIntensity: 1
   m_CustomReflection: {fileID: 0}
   m_Sun: {fileID: 0}
-  m_IndirectSpecularColor: {r: 0.18028331, g: 0.2257133, b: 0.3069217, a: 1}
+  m_IndirectSpecularColor: {r: 0.18319218, g: 0.2267955, b: 0.29456192, a: 1}
   m_UseRadianceAmbientProbe: 0
 --- !u!157 &3
 LightmapSettings:
@@ -175,7 +175,7 @@ Camera:
   near clip plane: 0.3
   far clip plane: 1000
   field of view: 60
-  orthographic: 0
+  orthographic: 1
   orthographic size: 5
   m_Depth: -1
   m_CullingMask:
@@ -298,14 +298,46 @@ PrefabInstance:
       propertyPath: m_LocalEulerAnglesHint.z
       value: 0
       objectReference: {fileID: 0}
+    - target: {fileID: 757445291285196762, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_SortingOrder
+      value: 0
+      objectReference: {fileID: 0}
     - target: {fileID: 757445291285196765, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
       propertyPath: m_Name
       value: LocalScoreBoardCanvas
       objectReference: {fileID: 0}
+    - target: {fileID: 757445291285196765, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_IsActive
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 757445291660857971, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
     - target: {fileID: 757445291660857971, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
       propertyPath: m_SizeDelta.y
       value: 0
       objectReference: {fileID: 0}
+    - target: {fileID: 1867618750032795257, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_Text
+      value: Time
+      objectReference: {fileID: 0}
+    - target: {fileID: 3421564380825088160, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3421564380825088160, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3421564380825088160, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3421564380825088160, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
     - target: {fileID: 6810100177073109259, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
       propertyPath: m_AnchorMax.y
       value: 0
@@ -324,97 +356,60 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 6c67d7499ec201640a279a6b98f8931c, type: 3}
---- !u!1 &1428890689
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1428890691}
-  - component: {fileID: 1428890690}
-  m_Layer: 0
-  m_Name: Directional Light
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!108 &1428890690
-Light:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1428890689}
-  m_Enabled: 1
-  serializedVersion: 10
-  m_Type: 1
-  m_Shape: 0
-  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
-  m_Intensity: 1
-  m_Range: 10
-  m_SpotAngle: 30
-  m_InnerSpotAngle: 21.80208
-  m_CookieSize: 10
-  m_Shadows:
-    m_Type: 2
-    m_Resolution: -1
-    m_CustomResolution: -1
-    m_Strength: 1
-    m_Bias: 0.05
-    m_NormalBias: 0.4
-    m_NearPlane: 0.2
-    m_CullingMatrixOverride:
-      e00: 1
-      e01: 0
-      e02: 0
-      e03: 0
-      e10: 0
-      e11: 1
-      e12: 0
-      e13: 0
-      e20: 0
-      e21: 0
-      e22: 1
-      e23: 0
-      e30: 0
-      e31: 0
-      e32: 0
-      e33: 1
-    m_UseCullingMatrixOverride: 0
-  m_Cookie: {fileID: 0}
-  m_DrawHalo: 0
-  m_Flare: {fileID: 0}
-  m_RenderMode: 0
-  m_CullingMask:
-    serializedVersion: 2
-    m_Bits: 4294967295
-  m_RenderingLayerMask: 1
-  m_Lightmapping: 4
-  m_LightShadowCasterMode: 0
-  m_AreaSize: {x: 1, y: 1}
-  m_BounceIntensity: 1
-  m_ColorTemperature: 6570
-  m_UseColorTemperature: 0
-  m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
-  m_UseBoundingSphereOverride: 0
-  m_UseViewFrustumForShadowCasterCull: 1
-  m_ShadowRadius: 0
-  m_ShadowAngle: 0
---- !u!4 &1428890691
-Transform:
+--- !u!1001 &1554473736
+PrefabInstance:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1428890689}
-  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
-  m_LocalPosition: {x: 0, y: 3, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 0}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 126720, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_Name
+      value: Lights
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 409160, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: ad67cddd729fb4342be2063a3f5ad7cc, type: 3}
diff --git a/Assets/Scripts/Managers/LeaderboardManager.cs b/Assets/Scripts/Managers/LeaderboardManager.cs
deleted file mode 100644
index 0e7da95..0000000
--- a/Assets/Scripts/Managers/LeaderboardManager.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using System.IO;
-using Newtonsoft.Json.Linq;
-using Newtonsoft;
-
-public class LeaderboardManager : MonoBehaviour
-{
-    // Start is called before the first frame update
-    void Start()
-    {
-        
-    }
-
-    // Update is called once per frame
-    void Update()
-    {
-        
-    }
-
-// CONTOH JSON NYA CEK AJA DI FOLDER SAVEFILE/LEADERBOARD.JSON
-// JADI DIA KEK LIST OF LIST OF OBJECTS, BELUM SORTED
-    public void LoadFromFile()
-    {
-        string filePath = Application.dataPath + "/SaveFile/Leaderboard.json";
-        if (File.Exists(filePath))
-        {
-            string jsonData = File.ReadAllText(filePath);
-            JArray dataArray = JArray.Parse(jsonData);
-            foreach (var data in dataArray)
-            {
-                List<object> leaderboardData = new List<object>(data.ToObject<object[]>());
-                string username = (string)leaderboardData[0];
-                int score = (int)leaderboardData[1];
-                string date = (string)leaderboardData[2];
-
-                // do something with the loaded data
-            }
-        }
-        else
-        {
-            Debug.Log("File not found");
-        }
-    }
-
-
-}
diff --git a/Assets/Scripts/Managers/LeaderboardManager.cs.meta b/Assets/Scripts/Managers/LeaderboardManager.cs.meta
deleted file mode 100644
index b0d5328..0000000
--- a/Assets/Scripts/Managers/LeaderboardManager.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 3aa6c46ddde6f6946ba26dc32c4a38e4
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Scripts/Managers/ScoreBoardManager.cs b/Assets/Scripts/Managers/ScoreBoardManager.cs
index 135008c..42dfb08 100644
--- a/Assets/Scripts/Managers/ScoreBoardManager.cs
+++ b/Assets/Scripts/Managers/ScoreBoardManager.cs
@@ -2,6 +2,9 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
+using System.IO;
+using Newtonsoft.Json.Linq;
+using Newtonsoft;
 
 #if UNITY_EDITOR
     using UnityEditor;
@@ -16,30 +19,74 @@ public class ScoreBoardManager : MonoBehaviour
     void Start()
     {
         prefab = AssetDatabase.LoadAssetAtPath("Assets/Prefabs/LocalScoreBoardItem.prefab", typeof(GameObject));
+        LoadFromFile();
     }
 
     // Update is called once per frame
     void Update()
     {
-        // INI BUAT TESTING AJAAA
-        if (Input.GetKeyDown(KeyCode.B)) {
-            Debug.Log("UPDATE");
-            addScoreBoardItem(100, "2019-01-01");
-        }  
+        
     }
 
-    void addScoreBoardItem(int score, string date) {
+    void addScoreBoardItem(string name, int score) {
         Debug.Log("ADD SCORE BOARD ITEM");
 
         GameObject scoreBoardInstance = Instantiate(prefab, Vector3.zero, Quaternion.identity) as GameObject;
 
         scoreBoardInstance.transform.GetChild(0).GetComponent<Text>().text = (content.transform.childCount + 1).ToString() + ".";
-        scoreBoardInstance.transform.GetChild(1).GetComponent<Text>().text = score.ToString();
-        scoreBoardInstance.transform.GetChild(2).GetComponent<Text>().text = date;
+        scoreBoardInstance.transform.GetChild(1).GetComponent<Text>().text = name;
+        scoreBoardInstance.transform.GetChild(2).GetComponent<Text>().text = score.ToString();
 
         Debug.Log(scoreBoardInstance.transform.GetChild(1).GetComponent<Text>().text);
         Debug.Log(scoreBoardInstance.transform.GetChild(2).GetComponent<Text>().text);
 
         scoreBoardInstance.transform.SetParent(content.transform, false);
     }
+
+// CONTOH JSON NYA CEK AJA DI FOLDER SAVEFILE/LEADERBOARD.JSON
+// JADI DIA KEK LIST OF LIST OF OBJECTS, BELUM SORTED
+    public void LoadFromFile()
+    {
+        string filePath = Application.dataPath + "/SaveFile/Leaderboard.json";
+        if (File.Exists(filePath))
+        {
+            string jsonData = File.ReadAllText(filePath);
+            JArray dataArray = JArray.Parse(jsonData);
+
+            List<LeaderboardItem> leaderboardItems = new List<LeaderboardItem>();
+
+            foreach (var data in dataArray)
+            {
+                List<object> leaderboardData = new List<object>(data.ToObject<object[]>());
+                string username = (string)leaderboardData[0];
+                int score = int.Parse(leaderboardData[1].ToString());
+                string date = (string)leaderboardData[2];
+
+                leaderboardItems.Add(new LeaderboardItem(username, score));
+            }
+
+            // sort the leaderboard items in descending order based on score
+            leaderboardItems.Sort((item1, item2) => item1.Score.CompareTo(item2.Score));
+
+            foreach (var item in leaderboardItems)
+            {
+                addScoreBoardItem(item.Username, item.Score);
+            }
+        }
+        else
+        {
+            Debug.Log("File not found");
+        }
+    }
+    public class LeaderboardItem
+    {
+        public string Username { get; set; }
+        public int Score { get; set; }
+
+        public LeaderboardItem(string username, int score)
+        {
+            Username = username;
+            Score = score;
+        }
+    }
 }
-- 
GitLab