You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.2 KiB
C#
123 lines
4.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using DG.Tweening;
|
|
using PlayFab;
|
|
using PlayFab.ClientModels;
|
|
using UnityEngine;
|
|
|
|
public class LeaderboardUIScreen : MonoBehaviour
|
|
{
|
|
[SerializeField] private GameObject lbItemPrefab;
|
|
[SerializeField] private GameObject lbItemSelfPrefab;
|
|
[SerializeField] private Transform content;
|
|
[SerializeField] private List<LBPedestalItem> _lbPedestalItems;
|
|
|
|
|
|
public void Init()
|
|
{
|
|
Debug.Log("Init called. IsClientLoggedIn: " + PlayFabClientAPI.IsClientLoggedIn());
|
|
|
|
if (PlayFabClientAPI.IsClientLoggedIn())
|
|
{
|
|
PlayFabManager.Instance.playFabLeaderboards.GetLeaderboard(OnLeaderboardFetchSuccess, OnLeaderboardFetchFailure);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("Not logged in yet. Cannot fetch leaderboard.");
|
|
}
|
|
}
|
|
|
|
|
|
public void OnClose()
|
|
{
|
|
// GameObject[] temp = content.transform.GetComponentsInChildren<GameObject>();
|
|
// for (int i = 0; i < temp.Length; i++)
|
|
// {
|
|
// Destroy(temp[i]);
|
|
// }
|
|
}
|
|
private void OnLeaderboardFetchSuccess(List<PlayerLeaderboardEntry> leaderboard)
|
|
{
|
|
Debug.Log("OnLeaderboardFetchSuccess");
|
|
foreach (Transform child in content.transform)
|
|
{
|
|
Destroy(child.gameObject);
|
|
}
|
|
PopulateLeaderboard(leaderboard);
|
|
}
|
|
|
|
private void PopulateLeaderboard(List<PlayerLeaderboardEntry> leaderboard)
|
|
{
|
|
foreach (PlayerLeaderboardEntry lbEntry in leaderboard)
|
|
{
|
|
PopulateLbItem(lbEntry);
|
|
if (lbEntry.Position <= 2)
|
|
{
|
|
PopulatePedestalItem(lbEntry);
|
|
}
|
|
}
|
|
|
|
content.GetComponent<RectTransform>().DOAnchorPosX(0f, 1f).SetEase(Ease.OutElastic);
|
|
}
|
|
private void PopulateLbItem(PlayerLeaderboardEntry lbEntry)
|
|
{
|
|
bool isSelf = false;
|
|
if (lbEntry.Profile != null && PlayFabManager.Instance.playFabUserDataManager.myProfile != null)
|
|
{
|
|
isSelf = lbEntry.Profile.PlayerId == PlayFabManager.Instance.playFabUserDataManager.myProfile.PlayerId;
|
|
}
|
|
|
|
LBEntryItem lbItem = Instantiate(isSelf ? lbItemSelfPrefab : lbItemPrefab, content).GetComponent<LBEntryItem>();
|
|
lbItem.nameText.text = lbEntry.DisplayName ?? lbEntry.PlayFabId;
|
|
lbItem.rankText.text = (lbEntry.Position + 1).ToString();
|
|
lbItem.scoreText.text = lbEntry.StatValue.ToString();
|
|
|
|
PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, sprite =>
|
|
{
|
|
lbItem.profilePic.sprite = sprite;
|
|
}, error =>
|
|
{
|
|
Debug.Log("Couldn't get pic");
|
|
});
|
|
}
|
|
|
|
//private void PopulateLbItem(PlayerLeaderboardEntry lbEntry)
|
|
//{
|
|
// bool isSelf = lbEntry.Profile.PlayerId == PlayFabManager.Instance.playFabUserDataManager.myProfile.PlayerId;
|
|
// LBEntryItem lbItem = Instantiate(isSelf ? lbItemSelfPrefab : lbItemPrefab, content).GetComponent<LBEntryItem>();
|
|
// lbItem.nameText.text = lbEntry.DisplayName;
|
|
// lbItem.rankText.text = (lbEntry.Position + 1).ToString();
|
|
// lbItem.scoreText.text = lbEntry.StatValue.ToString();
|
|
// PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, (sprite) =>
|
|
// {
|
|
// lbItem.profilePic.sprite = sprite;
|
|
// },
|
|
// (s) =>
|
|
// {
|
|
// Debug.Log("Couldnt get pic");
|
|
// });
|
|
//}
|
|
|
|
private void PopulatePedestalItem(PlayerLeaderboardEntry lbEntry)
|
|
{
|
|
LBPedestalItem pedestalItem = _lbPedestalItems[lbEntry.Position];
|
|
pedestalItem.nameText.text = lbEntry.DisplayName ?? lbEntry.PlayFabId;
|
|
pedestalItem.scoreText.text = lbEntry.StatValue.ToString();
|
|
PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, (sprite) =>
|
|
{
|
|
pedestalItem.profilePic.sprite = sprite;
|
|
},
|
|
(s) =>
|
|
{
|
|
Debug.Log("Could'nt get pic");
|
|
});
|
|
}
|
|
|
|
private void OnLeaderboardFetchFailure(PlayFabError error)
|
|
{
|
|
Debug.LogError("❌ Failed to fetch leaderboard: " + error.GenerateErrorReport());
|
|
}
|
|
|
|
|
|
|
|
} |