IEnumerator GetHighscores(string token, string id = "", int perPage = 10) { isUpdatingHighscores = true; string url = _baseUrl + "highscore/xp/?perPage=" + perPage; if (id != "") { url += "&id=" + id; } else if (_currentPage >= 1) { url += "&page=" + _currentPage; } using (UnityWebRequest webRequest = UnityWebRequest.Get(url)) { webRequest.SetRequestHeader("token", token); yield return(webRequest.SendWebRequest()); if (webRequest.isNetworkError || webRequest.isHttpError) { Debug.Log(webRequest.error); } if (webRequest.isDone) { if (webRequest.responseCode == 200) { string json = System.Text.Encoding.UTF8.GetString(webRequest.downloadHandler.data); HighscorePage highscores = JsonConvert.DeserializeObject <HighscorePage>(json); for (int i = 0; i < highscores?.Entries?.Count; i++) { HighscoreElement element = HighscoreElements[i].GetComponent <HighscoreElement>(); element.Placement.text = highscores.Entries[i].Rank.ToString(); element.Username.text = highscores.Entries[i].Player.PlayerId; element.Score.text = highscores.Entries[i].Player.Experience.ToString(); if (!String.IsNullOrEmpty(_userID) && highscores.Entries[i].Player.PlayerId == _userID) { element.Highlight(true); } else { element.Highlight(false); } } if (highscores.Entries.Count < perPage) { for (int i = highscores.Entries.Count; i < perPage; i++) { HighscoreElement element = HighscoreElements[i].GetComponent <HighscoreElement>(); element.Placement.text = ""; element.Username.text = ""; element.Score.text = ""; element.Highlight(false); } } _currentPage = highscores.CurrentPage; _totalPages = highscores.TotalPageCount; } } } isUpdatingHighscores = false; }
public ActionResult <HighscorePage> Get([FromHeader] string token, int perPage = 10, int page = 1, string id = "") { if (Token.VerifyToken(token, "access")) { int rankIndex = 1; int curPage = 1; List <Players> players; HighscorePage hPage = new HighscorePage() { CurrentPage = 1, TotalPageCount = 1 }; if (id != "") { Players player = _contextRead.Players.Find(id); if (player != null) { //Minus one to always get the correct page number based on //page 0 = 1..10 //page 1 = 11..20 etc. curPage = _context.Players.Where(p => p.Experience >= player.Experience).Count() / perPage; players = _contextRead.Players.OrderByDescending(p => p.Experience).Skip(perPage * curPage).Take(perPage).ToList(); rankIndex = curPage * perPage + 1; //Keep pages 1 indexed curPage++; } else { return(NotFound()); } } else { curPage = page; if (curPage < 1) { curPage = 1; } players = _contextRead.Players.OrderByDescending(p => p.Experience).Skip(perPage * (curPage - 1)).Take(perPage).ToList(); rankIndex = (curPage - 1) * perPage + 1; } List <HighscoreEntry> result = new List <HighscoreEntry>(); //Plus one to show correct rank based on 1 indexed ranks for (int i = 0; i < players.Count; i++) { result.Add(new HighscoreEntry() { Player = players[i], Rank = rankIndex }); rankIndex++; } hPage.CurrentPage = curPage; hPage.Entries = result; hPage.TotalPageCount = (_contextRead.Players.Count() / perPage) + 1; return(hPage); } return(Unauthorized("Token invalid or expired!")); }