diff --git a/Assets/Prefabs/ExampleEntry.prefab b/Assets/Prefabs/ExampleEntry.prefab new file mode 100644 index 0000000..3d35428 --- /dev/null +++ b/Assets/Prefabs/ExampleEntry.prefab @@ -0,0 +1,81 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4257747560028142092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8122599798421347575} + - component: {fileID: 4215216227097602698} + - component: {fileID: 8193573978652401978} + m_Layer: 5 + m_Name: ExampleEntry + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8122599798421347575 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4257747560028142092} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 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: 500, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4215216227097602698 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4257747560028142092} + m_CullTransparentMesh: 1 +--- !u!114 &8193573978652401978 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4257747560028142092} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 76f1829e461ec70459be88ac25ce8be0, type: 3} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + 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 - 88 diff --git a/Assets/Prefabs/ExampleEntry.prefab.meta b/Assets/Prefabs/ExampleEntry.prefab.meta new file mode 100644 index 0000000..d9cc75a --- /dev/null +++ b/Assets/Prefabs/ExampleEntry.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2ed0ef16e79afea49b7a28fc81483677 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/GameCanvas.prefab b/Assets/Prefabs/GameCanvas.prefab index 77bef8d..250bd09 100644 --- a/Assets/Prefabs/GameCanvas.prefab +++ b/Assets/Prefabs/GameCanvas.prefab @@ -1053,6 +1053,41 @@ MonoBehaviour: m_VerticalOverflow: 1 m_LineSpacing: 1 m_Text: +--- !u!1 &6379508702057918853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5125531201255756849} + m_Layer: 5 + m_Name: Entries + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5125531201255756849 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6379508702057918853} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 9211929347905050682} + 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: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &6630605910866455705 GameObject: m_ObjectHideFlags: 0 @@ -1201,7 +1236,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &9211929347905050682 RectTransform: m_ObjectHideFlags: 0 @@ -1219,6 +1254,7 @@ RectTransform: - {fileID: 8803843352571052312} - {fileID: 409311184415245482} - {fileID: 6952955741488584038} + - {fileID: 5125531201255756849} m_Father: {fileID: 834552907522022778} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} diff --git a/Assets/Scenes/WorldScene.unity b/Assets/Scenes/WorldScene.unity index e5c8a5d..86f5940 100644 --- a/Assets/Scenes/WorldScene.unity +++ b/Assets/Scenes/WorldScene.unity @@ -511,6 +511,30 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 +--- !u!114 &607967473 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4797822364417701868, guid: e29ce1fe47a855c4e907d4312c9e9d6e, + type: 3} + m_PrefabInstance: {fileID: 1758685209} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &675660038 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2841827207845239115, guid: e29ce1fe47a855c4e907d4312c9e9d6e, + type: 3} + m_PrefabInstance: {fileID: 1758685209} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &739366992 PrefabInstance: m_ObjectHideFlags: 0 @@ -825,6 +849,11 @@ MonoBehaviour: k__BackingField: {fileID: 880466088} k__BackingField: {fileID: 1758685210} k__BackingField: {fileID: 447617108} + k__BackingField: {fileID: 1758685211} + k__BackingField: {fileID: 4257747560028142092, guid: 2ed0ef16e79afea49b7a28fc81483677, + type: 3} + k__BackingField: {fileID: 607967473} + k__BackingField: {fileID: 675660038} --- !u!4 &1003288350 stripped Transform: m_CorrespondingSourceObject: {fileID: 4417313079524746681, guid: c0a03ce6c4f39224299267b83719ceb7, @@ -1144,6 +1173,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1758685211 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6379508702057918853, guid: e29ce1fe47a855c4e907d4312c9e9d6e, + type: 3} + m_PrefabInstance: {fileID: 1758685209} + m_PrefabAsset: {fileID: 0} --- !u!1 &1909908769 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/ScoreTracker.cs b/Assets/Scripts/ScoreTracker.cs index 5bc6c8e..f128a8f 100644 --- a/Assets/Scripts/ScoreTracker.cs +++ b/Assets/Scripts/ScoreTracker.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using InterfaceOff.MainMenu; using UnityEngine; using UnityEngine.UI; @@ -17,6 +18,11 @@ namespace InterfaceOff.WorldScene [field: SerializeField] private Text ScoreText { get; set; } [field: SerializeField] private Text FinalScoreText { get; set; } [field: SerializeField] private WindowSpawner Spawner { get; set; } + [field: SerializeField] private GameObject LeaderboardObject { get; set; } + [field: SerializeField] private GameObject LeaderboardEntryPrefab { get; set; } + + [field: SerializeField] private InputField PlayerTextNameInput { get; set; } + [field: SerializeField] private Button IDRKWhatToCallThis { get; set; } private static List PlayerScores { get; } = new(); private static ScoreTracker Instance { get; set; } @@ -35,7 +41,34 @@ namespace InterfaceOff.WorldScene return Instance.Score; } - private void Awake() => Instance = this; + private void RepaintLeaderboard() + { + foreach (Transform child in LeaderboardObject.transform) + { + Destroy(child.gameObject); + } + + PlayerScore[] scores = PlayerScores + .OrderByDescending(playerScore => playerScore.Score) + .Take(10) + .ToArray(); + + for (int idx = 0; idx < scores.Length; idx++) + { + GameObject go = Instantiate(LeaderboardEntryPrefab, LeaderboardObject.transform); + RectTransform rect = go.GetComponent(); + Text entryText = go.GetComponent(); + + entryText.text = $"[{scores[idx].PlayerName}] - {scores[idx].Score}"; + rect.anchoredPosition = new Vector2(0, 220 - ((idx + 1) * 40)); + } + } + + private void Awake() + { + RepaintLeaderboard(); + Instance = this; + } private void Update() { @@ -64,8 +97,12 @@ namespace InterfaceOff.WorldScene StoredCurrentScore = true; PlayerScores.Add(score); + RepaintLeaderboard(); + + PlayerTextNameInput.interactable = false; + IDRKWhatToCallThis.interactable = false; - Debug.Log($"Added score [{score.PlayerName} | {score.Score}]"); + Debug.Log($"Added score [{score.PlayerName} | {score.Score:F1}]"); } }