using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UI; using System.Threading.Tasks; public class GameManager : MonoBehaviour { private static GameManager _instance; public static GameManager instance => _instance; public TMP_Text[] usernameTxts; public TMP_Text[] coinsTxt; public TMP_Text[] gemsTxt; public TMP_Text[] twepsTxt; public TMP_Text metalTxt; // public TMP_Text oxygenTxt; public TMP_Text[] trophiesTxts; public TMP_Text[] mostTimeTxts; public TMP_Text doubleKillsTxt; public TMP_Text tripleKillsTxt; public TMP_Text quadKillsTxt; public TMP_Text pentaKillsTxt; public TMP_Text[] levelTxts; public Slider[] levelSliders; public TMP_Text[] levelProgressTxts; public TMP_Text[] rankText; public Image[] rankImages; public TMP_Text rankCost; // public Image RankIcon; // public GameObject loadingScreen; [Header("Profile")] public GameObject profilePopup; public GameObject networkErrorPopup; public float NetworkCheckInterval = 3; void Start() { _instance = this; //Go back to login if not logged if (!DBmanager.LoggedIn) { SceneManager.LoadScene(0); } else { RefreshData(); } AudioManager.instnace.SetMusic(0); } float networkCheckTimer = 0; void Update() { networkCheckTimer += Time.deltaTime; if (networkCheckTimer > NetworkCheckInterval) { // Debug.Log(Application.internetReachability); if (Application.internetReachability == NetworkReachability.NotReachable) { networkErrorPopup.SetActive(true); }else{ networkErrorPopup.SetActive(false); } networkCheckTimer=0; } } public static void Refresh(){ if(_instance != null){ _instance.RefreshData(); } } private void RefreshData() { foreach (TMP_Text usernameTxt in usernameTxts) { usernameTxt.text = DBmanager.DisplayName; } foreach (TMP_Text txt in coinsTxt) { txt.text = DBmanager.Coins.ToString(); } foreach (TMP_Text txt in gemsTxt) { txt.text = DBmanager.Gems.ToString(); } foreach (TMP_Text txt in twepsTxt) { txt.text = DBmanager.Tweps.ToString(); } metalTxt.text = DBmanager.Metal.ToString(); foreach(TMP_Text trophiesTxt in trophiesTxts){ trophiesTxt.text = DBmanager.Trophies.ToString(); } foreach(TMP_Text mostTimeTxt in mostTimeTxts){ mostTimeTxt.text = SceneData.SecondsToText(DBmanager.MostTime); } doubleKillsTxt.text = DBmanager.DoubleKills.ToString(); tripleKillsTxt.text = DBmanager.TripleKills.ToString(); quadKillsTxt.text = DBmanager.QuadKills.ToString(); pentaKillsTxt.text = DBmanager.PentaKills.ToString(); // oxygenTxt.text = DBmanager.Trophies.ToString(); foreach (TMP_Text levelTxt in levelTxts) { levelTxt.text = Mathf.CeilToInt(DBmanager.Level).ToString(); } float levelExcess = DBmanager.Level - Mathf.FloorToInt(DBmanager.Level); Debug.Log("Level : " + DBmanager.Level); foreach (Slider levelSlider in levelSliders) { levelSlider.value = Mathf.Clamp(levelExcess, 0.1f, 1); } foreach (TMP_Text levelProgressTxt in levelProgressTxts) { levelProgressTxt.text = $"{DBmanager.Xp}/{DBmanager.XpForNextLevel()}"; } foreach(TMP_Text rankTxt in rankText){ rankTxt.text = DBmanager.CurrentRank.name; } foreach(Image rankImg in rankImages){ rankImg.sprite = DBmanager.CurrentRank.image; ParticleSystem[] effects = rankImg.transform.parent.parent.GetComponentsInChildren(); foreach(ParticleSystem effect in effects){ effect.startColor = new Color(DBmanager.CurrentRank.color.r,DBmanager.CurrentRank.color.g, DBmanager.CurrentRank.color.b, effect.startColor.a); } } rankCost.text = DBmanager.CurrentRank.entryFee.ToString(); // RankIcon.sprite = DBmanager.CurrentRank.image; } public async void LoadMinigame() { // loadingScreen.SetActive(true); // await Task.Delay(1000); // SceneManager.LoadScene("Minigame"); LoadingScreen.instance.LoadLevel("Minigame"); AudioManager.instnace.BattleCasual(); } public void LoadRanked(){ if(DBmanager.Metal < DBmanager.CurrentRank.entryFee){ MessageDialog.instance.ShowMessage("Sorry", "You don't have enough energy to enter a Ranked match."); return; } LoadingScreen.instance.LoadLevel("MinigameMatchmaking"); AudioManager.instnace.BattleRanked(); } public void Signout(){ string msg = "You are about to sign out from this account."; if(DBmanager.isGuest){ msg+="\nWarning: You haven't linked this account.\nIf you proceed then your progress will be lost"; } MessageDialog.instance.ShowQuestion("Confirm", msg+"\n\n Are you sure to continue?", signout, ()=>{}); } public void DeleteAccount() { string msg = "You are about to Delete this account."; MessageDialog.instance.ShowQuestion("Confirm", msg + "\n\n Are you sure to continue?", deleteAccount, () => { }); } void deleteAccount() { DBmanager.DeleteAccount(); signout(); } void signout(){ PlayerPrefs.DeleteAll(); PlayerPrefs.Save(); LoadingScreen.instance.LoadLevel("Login"); } public void RewardChestEnergy(){ DBmanager.SetMetal(50,true); } public void BuyChest(ChestButton chestBtn){ if(DBmanager.Gems < chestBtn.Price){ MessageDialog.instance.ShowMessage("Failed", "Insufficient Gems to complete the purchase"); return; } DBmanager.SetGems(DBmanager.Gems-chestBtn.Price); ChestOpener.instance.OpenChest(chestBtn.chestData); } public void BuyGold(GoldPackButton button){ if(DBmanager.Gems < button.Price){ MessageDialog.instance.ShowMessage("Failed", "Insufficient Gems to complete the purchase"); return; } AudioManager.instnace.Spend(); DBmanager.SetGems(DBmanager.Gems-button.Price); DBmanager.SetCoins(DBmanager.Coins + button.Amount); } public void OnTwepsClicked(){ MessageDialog.instance.ShowMessage("Coming Soon!", "To be introduced soon."); } public void OnBoughtIAPGems(int Amount){ DBmanager.SetGems(DBmanager.Gems + Amount); AudioManager.instnace.Spend(); } public void OnIAPFailed(){ } }