using DG.Tweening; using System; using System.Collections; using TMPro; using UnityEngine; using UnityEngine.Networking; public class TitleCanvas : MonoBehaviour { private enum TitleCanvasState { CheckInternet, CheckVersion, DownloadData, LoadUnlockHuntingImage, LoadScene, } [SerializeField] private MaskableProgressBar MaskableBar; [SerializeField] private RectTransform blinkRT; [SerializeField] private TextMeshProUGUI progressbarText; [SerializeField] private AgeIndication ageIndication = null; private TitleCanvasState state = TitleCanvasState.CheckInternet; private Coroutine DownloadDataCoroutine = null; private Coroutine LoadUnlockHuntingImageCoroutine = null; private Coroutine EndAgeIndicationCoroutine = null; private void Awake() { if (GameManager.Instance != null) Debug.Log("base: Call Manager"); MaskableBar.FillAmount = 1.0f; blinkRT.DOAnchorPosX(250, 1.5f).SetEase(Ease.OutExpo).SetLoops(-1, LoopType.Restart).From(Vector2.left * 250); if (ageIndication != null) { ageIndication.gameObject.SetActive(true); ageIndication.OnCompleteHide += OnCompleteAgeIndicationHide; if (EndAgeIndicationCoroutine == null) { EndAgeIndicationCoroutine = StartCoroutine(EndAgeIndication()); } } else { OnCompleteAgeIndicationHide(); } } private void OnDestroy() { if (DOTween.IsTweening(blinkRT)) blinkRT.DOKill(); //GameManager.BGDatabase.ReleaseHuntingUnlockImage(); GameManager.OnCompleteCreatemanager -= OnCompleteCreatemanager; GameManager.Network.OnNetworkOnline -= OnNetworkOnline; GameManager.BGDatabase.OnCompleteLoadHuntingImage -= OnSucceedLoadUnlockHuntingImage; ageIndication.OnCompleteHide -= OnCompleteAgeIndicationHide; GameManager.Addressable.NotifiyCatalogUpdated -= OnCatalogUpdated; GameManager.Addressable.NotifiySizeDownloaded -= OnSizeDownloaded; GameManager.Addressable.NotifiyDownloadFinished -= OnDownloadFinished; GameManager.OnCompleteCreatemanager -= OnCompleteCreatemanager; if (EndAgeIndicationCoroutine != null) { StopCoroutine(EndAgeIndicationCoroutine); } } private void OnCompleteCreatemanager() { DateTime loadTime = GameManager.Timer.LoadTime(); if (loadTime.Day != DateTime.Now.Day) { GameManager.DB.ResetADSRewardActionCount(); GameManager.DB.ResetFreeHeartCount(); } state = TitleCanvasState.CheckInternet; StartCurrentState(); } private void StartCurrentState() { switch (state) { case TitleCanvasState.CheckInternet: StartCoroutine(CheckInternet()); break; case TitleCanvasState.CheckVersion: /*Addressables.ClearDependencyCacheAsync("TestPopup"); Addressables.DownloadDependenciesAsync("TestPopup").Completed += (handle) => { if (handle.Status == AsyncOperationStatus.Succeeded) { StartCoroutine(LoadTestPopup()); /*Addressables.LoadResourceLocationsAsync("TestPopup").Completed += (handle) => { if (handle.Status == AsyncOperationStatus.Succeeded) { //Addressables.LoadAssetsAsync(handle.Result). } }; } };*/ GameManager.ADS.InitADSManager(); CheckVersion(); break; case TitleCanvasState.DownloadData: //DownloadData(); // 리소스 다운로드 없음 NextState(); StartCurrentState(); break; case TitleCanvasState.LoadUnlockHuntingImage: LoadUnlockHuntingImage(); break; case TitleCanvasState.LoadScene: StartCoroutine(coroGoToNextScene()); break; } } private void NextState() { switch (state) { case TitleCanvasState.CheckInternet: state = TitleCanvasState.CheckVersion; break; case TitleCanvasState.CheckVersion: state = TitleCanvasState.DownloadData; break; case TitleCanvasState.DownloadData: state = TitleCanvasState.LoadUnlockHuntingImage; break; case TitleCanvasState.LoadUnlockHuntingImage: state = TitleCanvasState.LoadScene; break; } } private IEnumerator CheckInternet() { yield return null; progressbarText.text = "네트워크 확인 하는 중"; yield return new WaitForSecondsRealtime(0.5f); if (GameManager.Network.IsOnline) { NextState(); StartCurrentState(); } else { if (GameManager.DB.ExistSaveData()) { state = TitleCanvasState.LoadUnlockHuntingImage; StartCurrentState(); } else { WarrnigNeedInternet(); GameManager.Network.OnNetworkOnline += OnNetworkOnline; } } } private void CheckVersion() { progressbarText.text = "버전 확인 하는 중..."; StartCoroutine(LoadVersiontData("https://filgoodbanditshomepage.web.app/RandomGFGoStop.txt")); } private void DownloadData() { progressbarText.text = "다운로드 하는 중..."; GameManager.Addressable.DownloadData(); if (DownloadDataCoroutine == null) { DownloadDataCoroutine = StartCoroutine(UpdateDownloadData()); } } private void LoadUnlockHuntingImage() { // 튜토리얼 기능을 위해 main씬에서 세이브 초기화로 결정 // 임시적으로 세이브기능을 이곳에 나중에 다운로드 완료 후에 세이브하도록 수정 //GameManager.DB.SaveDatas(); progressbarText.text = "이미지 로드 하는 중..."; GameManager.BGDatabase.InitDataBase(); GameManager.BGDatabase.OnCompleteLoadHuntingImage += OnSucceedLoadUnlockHuntingImage; if (LoadUnlockHuntingImageCoroutine == null) { LoadUnlockHuntingImageCoroutine = StartCoroutine(UpdateLoadUnlockHuntingImage()); } } private IEnumerator coroGoToNextScene() { progressbarText.text = "로비 로드 하는 중..."; yield return new WaitUntil(() => GameManager.Instance != null); float cnt = 0; while (cnt < 2) { cnt += Time.deltaTime; MaskableBar.FillAmount = cnt / 2; yield return null; } GameManager.Scene.LoadScene(ESceneType.Main); } private IEnumerator LoadVersiontData(string url) { using (UnityWebRequest www = UnityWebRequest.Get(url)) { yield return www.SendWebRequest(); string updateVersion = www.downloadHandler.text; string currentVersion = Application.version; updateVersion = updateVersion.Replace(".", ""); currentVersion = currentVersion.Replace(".", ""); if (int.Parse(updateVersion) > int.Parse(currentVersion)) { WarrnigDifferentVersion(); } else { NextState(); StartCurrentState(); } yield break; } } private void OnSucceedLoadUnlockHuntingImage(bool isSucceed) { if (!isSucceed) { //Logging.LogError("LoadOutGameImage is Fail"); } else { if (LoadUnlockHuntingImageCoroutine != null) { StopCoroutine(LoadUnlockHuntingImageCoroutine); } NextState(); StartCurrentState(); } } private void OnNetworkOnline(bool isOnline) { if (isOnline == true) { if (GameManager.UI.IsOpendPopup(EPopupType.NotOnlinePopup)) { GameManager.UI.HideTopPopup(); } NextState(); StartCurrentState(); } } private void WarrnigDifferentVersion() { GameManager.UI.ShowNStackPopup(EPopupType.NotMinimumVersionPopup); } private void WarrnigNeedInternet() { GameManager.UI.ShowNStackPopup(EPopupType.NotOnlinePopup); } private void WarrnigFailDownload() { Debug.LogWarning("base: WarrnigFailDownload"); //ReturnFirstState(); } private void ReturnFirstState() { state = TitleCanvasState.CheckInternet; StartCurrentState(); } private void OnCatalogUpdated(bool isUpdateCataglog) { if (isUpdateCataglog == true) { } else { } } private void OnSizeDownloaded(long size) { } private void OnDownloadFinished(bool completed) { if (DownloadDataCoroutine != null) { StopCoroutine(DownloadDataCoroutine); } if (completed == true) { NextState(); StartCurrentState(); } else { WarrnigFailDownload(); } } private IEnumerator UpdateDownloadData() { MaskableBar.FillAmount = 0.0f; while (true) { yield return null; float percent = GameManager.Addressable.GetDownloadDataPercent(); if (percent <= 0.8f) { percent = (percent / 0.8f) * 0.2f; } else { percent = 0.2f + ((percent - 0.8f) / 0.2f) * 0.8f; } MaskableBar.FillAmount = percent; } } private IEnumerator UpdateLoadUnlockHuntingImage() { MaskableBar.FillAmount = 0.0f; yield return new WaitForSeconds(1.0f); GameManager.BGDatabase.LoadHuntingUnlockImage(); while (true) { yield return null; MaskableBar.FillAmount = GameManager.BGDatabase.LoadPercent; } } private IEnumerator EndAgeIndication() { if (ageIndication != null) { yield return new WaitForSecondsRealtime(ageIndication.GetFadeoutAnimationLength()); } OnCompleteAgeIndicationHide(); } private void OnCompleteAgeIndicationHide() { if (EndAgeIndicationCoroutine != null) { StopCoroutine(EndAgeIndicationCoroutine); } Destroy(ageIndication.gameObject); GameManager.Addressable.NotifiyCatalogUpdated += OnCatalogUpdated; GameManager.Addressable.NotifiySizeDownloaded += OnSizeDownloaded; GameManager.Addressable.NotifiyDownloadFinished += OnDownloadFinished; if (GameManager.DB.CompleteDataLoad == false) { GameManager.OnCompleteCreatemanager += OnCompleteCreatemanager; } else { OnCompleteCreatemanager(); } } }