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.
125 lines
3.7 KiB
C#
125 lines
3.7 KiB
C#
using UnityEngine;
|
|
using PlayFab;
|
|
using PlayFab.ClientModels;
|
|
using Google.Impl;
|
|
using MS;
|
|
using TMPro; // Required for TextMeshPro
|
|
using System;
|
|
public class Top10RankChecker : MonoBehaviour
|
|
{
|
|
public static Top10RankChecker Instance { get; private set; }
|
|
|
|
public Popup top10Panel;
|
|
public LeaderboardType leaderboardType = LeaderboardType.PiPuzzle;
|
|
public TextMeshProUGUI timeSpentText;
|
|
public TextMeshProUGUI DifficultyText;
|
|
|
|
private const string LastRankKey = "LastKnownRank";
|
|
private const string LevelTimeKey = "LastLevelTimeSpent";
|
|
|
|
private void Awake()
|
|
{
|
|
if (Instance != null && Instance != this)
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
|
|
Instance = this;
|
|
DontDestroyOnLoad(gameObject);
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
//CheckMyRank();
|
|
}
|
|
|
|
public void CheckMyRank()
|
|
{
|
|
string statName = leaderboardType.GetStatisticName();
|
|
|
|
var request = new GetLeaderboardAroundPlayerRequest
|
|
{
|
|
StatisticName = statName,
|
|
MaxResultsCount = 1
|
|
};
|
|
|
|
PlayFabClientAPI.GetLeaderboardAroundPlayer(request, result =>
|
|
{
|
|
if (result.Leaderboard != null && result.Leaderboard.Count > 0)
|
|
{
|
|
int currentRank = result.Leaderboard[0].Position;
|
|
int lastRank = PlayerPrefs.GetInt(LastRankKey, 999);
|
|
|
|
Debug.Log($"Current Rank: {currentRank}, Last Rank: {lastRank}");
|
|
|
|
if (lastRank > 9 && currentRank <= 9)
|
|
{
|
|
ShowTimeSpent();
|
|
ShowDifficultylevel();
|
|
top10Panel.Open();
|
|
Debug.Log("🎉 Entered Top 10! Showing panel.");
|
|
}
|
|
|
|
PlayerPrefs.SetInt(LastRankKey, currentRank);
|
|
PlayerPrefs.Save();
|
|
}
|
|
}, error =>
|
|
{
|
|
Debug.LogError("Failed to fetch leaderboard around player: " + error.GenerateErrorReport());
|
|
});
|
|
}
|
|
public void CheckMyRank(string statisticsName)
|
|
{
|
|
string statName = statisticsName;
|
|
|
|
var request = new GetLeaderboardAroundPlayerRequest
|
|
{
|
|
StatisticName = statName,
|
|
MaxResultsCount = 10
|
|
};
|
|
|
|
PlayFabClientAPI.GetLeaderboardAroundPlayer(request, result =>
|
|
{
|
|
if (result.Leaderboard != null && result.Leaderboard.Count > 0)
|
|
{
|
|
int currentRank = result.Leaderboard[0].Position;
|
|
int lastRank = PlayerPrefs.GetInt(LastRankKey, 999);
|
|
|
|
Debug.Log($"Current Rank: {currentRank}, Last Rank: {lastRank}");
|
|
|
|
if (lastRank > 9 && currentRank <= 9)
|
|
{
|
|
ShowTimeSpent();
|
|
ShowDifficultylevel();
|
|
top10Panel.Open();
|
|
Debug.Log("🎉 Entered Top 10! Showing panel.");
|
|
}
|
|
|
|
PlayerPrefs.SetInt(LastRankKey, currentRank);
|
|
PlayerPrefs.Save();
|
|
}
|
|
}, error =>
|
|
{
|
|
Debug.LogError("Failed to fetch leaderboard around player: " + error.GenerateErrorReport());
|
|
});
|
|
}
|
|
private void ShowTimeSpent()
|
|
{
|
|
float rawSeconds = PlayerPrefs.GetFloat(LevelTimeKey, 0f);
|
|
int minutes = Mathf.FloorToInt(rawSeconds / 60f);
|
|
int seconds = Mathf.FloorToInt(rawSeconds % 60f);
|
|
|
|
string formattedTime = $"{minutes}m and {seconds}s";
|
|
|
|
if (timeSpentText != null)
|
|
timeSpentText.text = formattedTime;
|
|
else
|
|
Debug.LogWarning("timeSpentText is not assigned in Top10RankChecker");
|
|
}
|
|
void ShowDifficultylevel()
|
|
{
|
|
DifficultyText.text = GameManager.currentLevelGroup.LevelGroupName;
|
|
}
|
|
}
|