KeepItUp/Assets/_Scripts/ScoreboardManager.cs
cuqmbr 662b65a605 feat: complete scoreboard
Add log in tip, loading screen & player record highlighting
2022-07-28 21:22:15 +03:00

43 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DatabaseModels.DataTransferObjets;
using UnityEngine;
public class ScoreboardManager : MonoBehaviour
{
[SerializeField] private UIManager _uiManager;
public async Task SpawnScoreboardRecords()
{
if (SessionStore.UserData == null)
{
_uiManager._scoreboardLoginTip.SetActive(true);
return;
}
_uiManager._scoreboardLoadingScreen.SetActive(true);
_uiManager.DestroyAllScoreboardRecords();
var filteredScoreboard = await GetFilteredScoreboard();
_uiManager.InstantiateScoreboardRecords(filteredScoreboard.records, filteredScoreboard.firstRecordIndex);
_uiManager._scoreboardLoadingScreen.SetActive(false);
async Task<(ScoreboardRecordDto[] records, int firstRecordIndex)> GetFilteredScoreboard()
{
int spareCount = 5;
var localRecords = await HttpClient.Get<List<ScoreboardRecordDto>>($"{SessionStore.ApiUrl}/scoreboard");
var currentUserRecord = localRecords.First(r => r.User.Username == SessionStore.UserData.Username);
var firstRecordNum = Mathf.Clamp(localRecords.IndexOf(currentUserRecord) - spareCount, 0, localRecords.Count);
var filteredRecords = localRecords
.SkipWhile(r => Math.Abs(localRecords.IndexOf(r) - localRecords.IndexOf(currentUserRecord)) >= spareCount)
.TakeWhile(r => Math.Abs(localRecords.IndexOf(r) - localRecords.IndexOf(currentUserRecord)) <= spareCount)
.ToArray();
return (filteredRecords, firstRecordNum);
}
}
}