// Update is called once per frame void Update() { // if game hasn't started or if game is over, ignore if (!gameStart.GetGameStart() || gameOver) { return; } if (!platform.GetRendering() || !hammer.GetRendering() || menu.GetStopGame()) { return; } if (timeLeft <= 0) // game ends if timer is over { if (!savedScore) { int finalScore = score.GetScore(); // get final score on this match PlayerHighscore.AddScore(finalScore); // update high scores' table savedScore = true; gameOver = true; StartCoroutine(ShowTimerOverMsg()); } } else { convertTime(); textTimer.text = minutes + ":" + seconds; } }
// creates the 3 text objects and assigns the text to them - based on the current object of the foreach loop in LoadPlayerHighscore() private void CreateHighscoreEntryTransform(PlayerHighscore highscoreEntry, Transform container, List <Transform> transformList) { var templateHeight = 50f; var entryTransform = Instantiate(entryTemplate, container); var entryRectTransform = entryTransform.GetComponent <RectTransform>(); entryRectTransform.anchoredPosition = new Vector2(0, -templateHeight * transformList.Count); entryTransform.gameObject.SetActive(true); var rank = transformList.Count + 1; string rankString; switch (rank) { default: rankString = rank + "TH"; break; case 1: rankString = "1ST"; break; case 2: rankString = "2ND"; break; case 3: rankString = "3RD"; break; } entryTransform.Find("posText").GetComponent <Text>().text = rankString; var score = highscoreEntry.score; entryTransform.Find("scoreText").GetComponent <Text>().text = score.ToString(); var name = highscoreEntry.name; entryTransform.Find("nameText").GetComponent <Text>().text = name; transformList.Add(entryTransform); }
// show scores public void ShowScores() { List <int> scoresList = PlayerHighscore.LoadScores(); if (scoresList.Count == 0) { noScores.SetActive(true); } else { for (int i = 0; i < scoresList.Count; i++) { scoresObj[i].SetActive(true); // sets score object to active Text scoreText = scoresObj[i].GetComponent <Text>(); // gets its text component int tmpNumber = i + 1; // number being shown on scores table scoreText.text = tmpNumber + ". " + scoresList[i]; // change text } } }
// Player class and methods \\ // adds ne high score to the PlayerPrefs with JSON, sorts the stats and limits them to 15 private void AddPlayerHighscore(string name, int score, int jumps, int walked) { // create new high score entry var highscore = new PlayerHighscore { name = name, score = score, jumps = jumps, walked = walked }; // load saved high score var loadListJSON = PlayerPrefs.GetString("allHighscores"); var highscoresList = JsonUtility.FromJson <Highscores>(loadListJSON); // if no data available if (highscoresList == null) { highscoresList = new Highscores() { playerHighscoreList = new List <PlayerHighscore>() }; } // check if current high score > 15. place if (highscoresList.playerHighscoreList.Count < 15) { // add new high score highscoresList.playerHighscoreList.Add(highscore); } else if (highscoresList.playerHighscoreList.Count == 15) { if (highscore.score > highscoresList.playerHighscoreList[14].score) { highscoresList.playerHighscoreList[14] = highscore; } } // sort list before saving for (var i = 0; i < highscoresList.playerHighscoreList.Count; i++) { for (var j = i + 1; j < highscoresList.playerHighscoreList.Count; j++) { if (highscoresList.playerHighscoreList[j].score > highscoresList.playerHighscoreList[i].score) { // swap var tmp = highscoresList.playerHighscoreList[i]; highscoresList.playerHighscoreList[i] = highscoresList.playerHighscoreList[j]; highscoresList.playerHighscoreList[j] = tmp; } } } // save list to file var saveListJSON = JsonUtility.ToJson(highscoresList); Debug.Log(saveListJSON); PlayerPrefs.SetString("allHighscores", saveListJSON); PlayerPrefs.Save(); }