mergemilitary/Assets/MMOModule/Scripts/MMOUIs/MMOUILoading.cs

89 lines
2.2 KiB
C#

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<Text>();
}
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();
}
}
}
}