using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class HighScoreManager : MonoBehaviour { private Transform entryContainer; private Transform entryTemplate; private List highScoreEntryList; private List highScoreEntryTransformList; [SerializeField] GameManager gameManager; [SerializeField] TimeController timeController; //To add new score: AddHighScoreEntry(10000, "60"); private void Awake() { entryContainer = transform.Find("EntryContainer"); entryTemplate = entryContainer.Find("EntryTemplate"); entryTemplate.gameObject.SetActive(false); string jsonString = PlayerPrefs.GetString("highscoreTable"); HighScores highScores = JsonUtility.FromJson(jsonString); highScoreEntryList = highScores.highscoreEntryList; highScoreEntryList.Sort((s2, s1) => s1.score.CompareTo(s2.score)); highScoreEntryTransformList = new List(); foreach(HighScoreEntry highScoreEntry in highScoreEntryList) { CreateHighScoreEntryTransform(highScoreEntry, entryContainer, highScoreEntryTransformList); } } private void CreateHighScoreEntryTransform(HighScoreEntry entry, Transform container, List transformList) { float templateHeight = 50f; Transform entryTransform = Instantiate(entryTemplate, container); RectTransform entryRectTransform = entryTransform.GetComponent(); entryRectTransform.anchoredPosition = new Vector2(0, -templateHeight * transformList.Count); entryTransform.gameObject.SetActive(true); entryTransform.Find("Rank").GetComponent().text = $"{transformList.Count + 1}"; entryTransform.Find("Score").GetComponent().text = $"{entry.score}"; entryTransform.Find("Time").GetComponent().text = entry.time; transformList.Add(entryTransform); } private void AddHighScoreEntry(int score, string time) { HighScoreEntry highScoreEntry = new HighScoreEntry { score = score, time = time }; string jsonString = PlayerPrefs.GetString("highscoreTable"); HighScores highScores = JsonUtility.FromJson(jsonString); highScores.highscoreEntryList.Add(highScoreEntry); string json = JsonUtility.ToJson(highScores); PlayerPrefs.SetString("highscoreTable", json); PlayerPrefs.Save(); } private class HighScores { public List highscoreEntryList; } [System.Serializable] private class HighScoreEntry { public int score; public string time; } public void TempGameOver() { AddHighScoreEntry((int)gameManager.GetPoints(), timeController.GetTime()); Debug.Log("Added entry"); } }