Files
2026-03-04 10:03:45 +08:00

138 lines
4.6 KiB
C#

using System;
using Steamworks;
using UnityEngine;
public class RewardsManager : MonoBehaviour
{
[Serializable]
private class RankingReward
{
public int ID;
public int POSITION;
}
[Serializable]
private class TournamentReward
{
public int TOURNAMENT_ID;
public string TOURNAMENT_NAME;
public int PARTICIPANTS_JOINED;
public int ENTRY_FEE;
public int POSITION;
public string TYPE;
}
public GameObject RankingRewardPopUpPrefab;
public GameObject TournamentRewardPopUpPrefab;
private RankingRewardPopUpItem currentRankingRewardPopUpItem;
private TournamentRewardPopUpItem currentTournamentRewardPopUpItem;
private void Start()
{
CheckRewards();
InvokeRepeating("CheckRewards", 2f, 2f);
}
private void FixedUpdate()
{
}
public void CheckRewards()
{
if (!SteamManager.Initialized || GameManager.Instance._playerData.currentPlayerProfileIndex == -1)
{
return;
}
ServerManager.Instance.GetOwnRewards();
if ((bool)currentRankingRewardPopUpItem || (bool)currentTournamentRewardPopUpItem)
{
return;
}
for (int i = 0; i < ServerManager.Instance.rewardsOwnData.Count; i++)
{
string rEWARD_TYPE = ServerManager.Instance.rewardsOwnData[i].REWARD_TYPE;
if (!(rEWARD_TYPE == "Ranking"))
{
if (rEWARD_TYPE == "Tournament")
{
ShowTournamentReward(ServerManager.Instance.rewardsOwnData[i].REWARD, i);
}
}
else
{
ShowRankingsReward(ServerManager.Instance.rewardsOwnData[i].REWARD, i);
}
}
}
private void ShowRankingsReward(string reward, int index)
{
if (!currentRankingRewardPopUpItem)
{
RankingReward rankingReward = new RankingReward();
rankingReward = JsonUtility.FromJson<RankingReward>(reward);
Debug.Log("Odbierz nagrode rankingow¹ za miejsce " + rankingReward.POSITION + " id:" + rankingReward.ID);
Transform parent = UnityEngine.Object.FindObjectOfType<MainGameScene>().transform;
currentRankingRewardPopUpItem = UnityEngine.Object.Instantiate(RankingRewardPopUpPrefab, parent).GetComponent<RankingRewardPopUpItem>();
currentRankingRewardPopUpItem.position = rankingReward.POSITION;
ServerManager.Instance.rewardsOwnData.RemoveAt(index);
}
}
private void ShowTournamentReward(string reward, int index)
{
if ((bool)currentTournamentRewardPopUpItem || string.IsNullOrEmpty(reward))
{
return;
}
TournamentReward tournamentReward = new TournamentReward();
tournamentReward = JsonUtility.FromJson<TournamentReward>(reward);
Debug.Log("Odbierz nagrode turniejow¹ za miejsce " + tournamentReward.POSITION + " id:" + tournamentReward.TOURNAMENT_ID);
for (int i = 0; i < TournamentManager.Instance.tournamentPrizes.Length; i++)
{
if (!(tournamentReward.TYPE == TournamentManager.Instance.tournamentPrizes[i].tournamentType.ToString()) || tournamentReward.POSITION != TournamentManager.Instance.tournamentPrizes[i].Position)
{
continue;
}
Transform parent = UnityEngine.Object.FindObjectOfType<MainGameScene>().transform;
currentTournamentRewardPopUpItem = UnityEngine.Object.Instantiate(TournamentRewardPopUpPrefab, parent).GetComponent<TournamentRewardPopUpItem>();
currentTournamentRewardPopUpItem.position = tournamentReward.POSITION;
currentTournamentRewardPopUpItem.cash = Mathf.RoundToInt((float)(tournamentReward.PARTICIPANTS_JOINED * tournamentReward.ENTRY_FEE) * ((float)TournamentManager.Instance.tournamentPrizes[i].PrizepoolPercent * 0.01f));
currentTournamentRewardPopUpItem.rankingPoints = TournamentManager.Instance.tournamentPrizes[i].RankingPoints;
if (tournamentReward.TOURNAMENT_NAME == "None")
{
switch (tournamentReward.TYPE)
{
case "Cyclic":
currentTournamentRewardPopUpItem.tournamentName = LanguageManager.Instance.GetText("CYCLIC_TOURNAMENT") + " #" + tournamentReward.TOURNAMENT_ID;
break;
case "Daily":
currentTournamentRewardPopUpItem.tournamentName = LanguageManager.Instance.GetText("DAILY_TOURNAMENT") + " #" + tournamentReward.TOURNAMENT_ID;
break;
case "Players":
currentTournamentRewardPopUpItem.tournamentName = LanguageManager.Instance.GetText("PLAYERS_TOURNAMENT") + " #" + tournamentReward.TOURNAMENT_ID;
break;
}
}
else
{
currentTournamentRewardPopUpItem.tournamentName = tournamentReward.TOURNAMENT_NAME;
}
if (tournamentReward.POSITION == 0 && !Singleton<SaveDataManager>.Instance.IsCurrentlySandbox() && SteamUserStats.GetAchievement("WIN_TOURNAMENT_ACHIEVMENT", out var pbAchieved) && !pbAchieved && SteamUserStats.SetAchievement("WIN_TOURNAMENT_ACHIEVMENT"))
{
SteamUserStats.StoreStats();
}
}
ServerManager.Instance.rewardsOwnData.RemoveAt(index);
}
}