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.
PlumberUltimateAds/Assets/StatsScreen.cs

136 lines
3.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using PlayFab.ClientModels;
using PlayFab;
using System;
using System.Threading.Tasks;
public class StatsScreen : MonoBehaviour
{
public TextMeshProUGUI levelsCompleted;
public TextMeshProUGUI top10Count;
public TextMeshProUGUI top3Count;
public LevelGroup[] levelGroups;
public int getAllTimerLevels()
{
int allLevels = 0;
for (int i = 0; i < levelGroups.Length; i++)
{
allLevels += levelGroups[i].CompletedLevel_Timer;
}
return allLevels;
}
public async void OnScreenOpened()
{
levelsCompleted.text = getAllTimerLevels().ToString() + "/250";
top10Count.text = "...";
top3Count.text = "...";
Task<int> top10Task = getAllTop10LevelsAsync();
Task<int> top3Task = getAllTop3LevelsAsync();
await Task.WhenAll(top10Task, top3Task);
top10Count.text = top10Task.Result.ToString();
top3Count.text = top3Task.Result.ToString();
}
private async Task<int> getAllTop3LevelsAsync()
{
int result = 0;
int groupIndex = 0;
foreach (var group in levelGroups)
{
for (int levelIndex = 0; levelIndex < group.CompletedLevel_Timer; levelIndex++)
{
string statisticName = $"{GameConstants.GameNamePrefix}_{groupIndex + 1}_Level_{levelIndex}_Time";
if (await IsInTop3(statisticName))
{
result++;
}
}
groupIndex++;
}
return result;
}
private async Task<int> getAllTop10LevelsAsync()
{
int result = 0;
int groupIndex = 0;
foreach (var group in levelGroups)
{
for (int levelIndex = 0; levelIndex < group.CompletedLevel_Timer; levelIndex++)
{
string statisticName = $"{GameConstants.GameNamePrefix}_{groupIndex + 1}_Level_{levelIndex}_Time";
if (await IsInTop10(statisticName))
{
result++;
}
}
groupIndex++;
}
return result;
}
public async Task<bool> IsInTop3(string statisticsName)
{
var request = new GetLeaderboardAroundPlayerRequest
{
StatisticName = statisticsName,
MaxResultsCount = 10
};
var tcs = new TaskCompletionSource<bool>();
PlayFabClientAPI.GetLeaderboardAroundPlayer(request, result =>
{
string myId = PlayFabSettings.staticPlayer.PlayFabId;
var myEntry = result.Leaderboard.Find(entry => entry.PlayFabId == myId);
tcs.SetResult(myEntry != null && myEntry.Position <= 2); // 0<>2
},
error =>
{
Debug.LogError("Failed to fetch leaderboard: " + error.GenerateErrorReport());
tcs.SetResult(false);
});
return await tcs.Task;
}
public async Task<bool> IsInTop10(string statisticsName)
{
var request = new GetLeaderboardAroundPlayerRequest
{
StatisticName = statisticsName,
MaxResultsCount = 10
};
var tcs = new TaskCompletionSource<bool>();
PlayFabClientAPI.GetLeaderboardAroundPlayer(request, result =>
{
string myId = PlayFabSettings.staticPlayer.PlayFabId;
var myEntry = result.Leaderboard.Find(entry => entry.PlayFabId == myId);
tcs.SetResult(myEntry != null && myEntry.Position <= 9); // 0<>9
},
error =>
{
Debug.LogError("Failed to fetch leaderboard: " + error.GenerateErrorReport());
tcs.SetResult(false);
});
return await tcs.Task;
}
}