2023-11-24 12:48:57 +08:00
|
|
|
|
using TMPro;
|
|
|
|
|
|
using Image = UnityEngine.UI.Image;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using Gameplay.SubSystems;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using Framework;
|
|
|
|
|
|
using Gameplay;
|
|
|
|
|
|
|
|
|
|
|
|
public class UI_LoadingController : UIWindow
|
|
|
|
|
|
{
|
|
|
|
|
|
//UI GameObj
|
|
|
|
|
|
///Auto Gen Start///
|
|
|
|
|
|
public Image Image_BG;
|
|
|
|
|
|
public TMP_Text Text_InfoTitle;
|
|
|
|
|
|
public TMP_Text Text_Info;
|
|
|
|
|
|
public TMP_Text Text_Process;
|
|
|
|
|
|
public TMP_Text Text_Capacity;
|
|
|
|
|
|
public Image Image_ProcessBar;
|
|
|
|
|
|
|
|
|
|
|
|
///Auto Gen End///
|
|
|
|
|
|
|
|
|
|
|
|
// Use this for initialization
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------- 进度控制
|
|
|
|
|
|
private float lastUpdate = 0f;
|
|
|
|
|
|
private float displayProgress = 0f;
|
|
|
|
|
|
private bool loadResEnd;
|
|
|
|
|
|
private Action onLoadingEnd;
|
|
|
|
|
|
int index = 0;
|
|
|
|
|
|
public override async void OnAwake()
|
|
|
|
|
|
{
|
|
|
|
|
|
//bind UI GameObj
|
|
|
|
|
|
UI_LoadingBinder.GetComponents(this);
|
|
|
|
|
|
await LoadingUILocalize.Instance.Init();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//invoke when open window
|
|
|
|
|
|
protected override void OnOpenWindow(object data = null)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//invoke when reload window
|
|
|
|
|
|
protected override void OnReloadWindow(object data = null)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
private int GetIndexPlusOne(int i)
|
|
|
|
|
|
{
|
|
|
|
|
|
i++;
|
|
|
|
|
|
if(i< LoadingUILocalize.Instance.Config.DataList.Count)
|
|
|
|
|
|
{
|
|
|
|
|
|
return i;
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
float refreshTime = 3f;
|
|
|
|
|
|
float nowTime = 0;
|
|
|
|
|
|
void Update()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (nowTime >= refreshTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
nowTime = 0;
|
|
|
|
|
|
RefreshJieShao();
|
|
|
|
|
|
index= GetIndexPlusOne(index);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
nowTime += Time.deltaTime;
|
|
|
|
|
|
}
|
|
|
|
|
|
var currentExcutor = LoadingExecutorManager.Instance.CurrentExcutor;
|
|
|
|
|
|
if (currentExcutor != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
LoadingText();
|
|
|
|
|
|
if (displayProgress < currentExcutor.DestProgress)
|
|
|
|
|
|
{
|
|
|
|
|
|
float diffValue = currentExcutor.DestProgress - displayProgress;
|
|
|
|
|
|
float deltaValue = 0.02f;
|
|
|
|
|
|
|
|
|
|
|
|
if (loadResEnd) //资源文件下载完后,进度条最小走1
|
|
|
|
|
|
deltaValue = Mathf.Max(1.0f, diffValue * 0.1f);
|
|
|
|
|
|
else if (diffValue < 0.5f) //资源下载过程中,进度条精确到小数点后2位
|
|
|
|
|
|
deltaValue = Mathf.Max(0.02f, diffValue * 0.1f);
|
|
|
|
|
|
else
|
|
|
|
|
|
deltaValue = Mathf.Max(0.1f, diffValue * 0.1f);
|
|
|
|
|
|
|
|
|
|
|
|
displayProgress += deltaValue;
|
|
|
|
|
|
displayProgress = Mathf.Min(100f, displayProgress);
|
|
|
|
|
|
SetLoadingPrecentage(displayProgress);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void RefreshJieShao()
|
|
|
|
|
|
{
|
|
|
|
|
|
string[] alltext = LoadingUILocalize.Instance.GetTextByIndex(index).Split("/");
|
|
|
|
|
|
|
|
|
|
|
|
Text_InfoTitle.text =alltext[0] ;
|
|
|
|
|
|
Text_Info.text = alltext[1];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void LoadingText()
|
|
|
|
|
|
{
|
|
|
|
|
|
const float EPSINON = 0.000001f;
|
|
|
|
|
|
|
|
|
|
|
|
if (Math.Abs(lastUpdate) < EPSINON)
|
|
|
|
|
|
{
|
|
|
|
|
|
SetLoadingPrecentage(0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (Math.Abs(lastUpdate) < EPSINON || Time.unscaledTime > (lastUpdate + 5f))
|
|
|
|
|
|
{
|
|
|
|
|
|
lastUpdate = Time.unscaledTime;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private async Task SetLoadingPrecentage(float num)
|
|
|
|
|
|
{
|
|
|
|
|
|
float x = num ;
|
|
|
|
|
|
Text_Process.text = x.ToString("f0")+"%";
|
2023-11-24 17:05:47 +08:00
|
|
|
|
Image_ProcessBar.fillAmount = x*0.01f;
|
2023-11-24 12:48:57 +08:00
|
|
|
|
if (num >= 100f)
|
|
|
|
|
|
{
|
|
|
|
|
|
await UniTask.NextFrame();
|
|
|
|
|
|
onLoadingEnd?.Invoke();
|
|
|
|
|
|
HideWindow();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void StartLoading(Action onEnd)
|
|
|
|
|
|
{
|
|
|
|
|
|
enabled = true;
|
|
|
|
|
|
displayProgress = 0;
|
|
|
|
|
|
Image_ProcessBar.fillAmount = 0f;
|
|
|
|
|
|
Text_Process.text = 0+"%";
|
|
|
|
|
|
|
|
|
|
|
|
onLoadingEnd = onEnd;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|