using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; namespace MMO { public class MMOUILoading : MMOUIBase { public Action DelInitOver; public Action DelLoadOver; [SerializeField] GameObject mGobFirstSign; [SerializeField] Text mTxtProgress; [SerializeField] Image mImgProgress; private Text mTxtTip; private Tweener mTween; private bool mIsInitHanging = false; private void Awake() { mTxtTip = mGobFirstSign.GetComponent(); } public override void OnOpen() { base.OnOpen(); mGobFirstSign.SetActive(!MMOUserData.Instance.HasFirstLoaded); mImgProgress.fillAmount = 0; mTween = mImgProgress.DOFillAmount(UnityEngine.Random.Range(0.93f, 0.97f), MMOUserData.Instance.HasFirstLoaded ? 1 : 10); mTween.onUpdate = UpdateText; mTween.onComplete = OnInitOver; } public void FinishRest() { if (mTween != null) { mTween.onUpdate = null; mTween.onComplete = null; mTween.Kill(); } mTween = mImgProgress.DOFillAmount(1, 0.5f); mTween.onUpdate = UpdateText; mTween.onComplete = OnLoadOver; } private void UpdateText() { mTxtProgress.text = string.Format("LOADING...{0:f0}%", Mathf.Clamp(mImgProgress.fillAmount * 100, 0, 100)); } private void OnInitOver() { if (Application.internetReachability == NetworkReachability.NotReachable) { mGobFirstSign.SetActive(true); mTxtTip.text = "Loading failed, please check the network"; mIsInitHanging = true; return; } DelInitOver?.Invoke(); } private void OnLoadOver() { DelLoadOver?.Invoke(); Close(); } public void NotifyInitOver() { if (IsOpened && mIsInitHanging) { mGobFirstSign.SetActive(false); DelInitOver?.Invoke(); } } } }