NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/LoadingExecutor/LoadingDisplay.cs

74 lines
2.1 KiB
C#
Raw Normal View History

2024-08-28 17:03:50 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Gameplay
{
/// <summary>
/// 加载表现类
/// </summary>
public class LoadingDisplay
{
/// <summary>
/// 进度变化的插值时间
/// </summary>
private float changeProgressTime;
/// <summary>
/// 上次获取时间
/// </summary>
private float preGetTime;
/// <summary>
/// 目标进度
/// </summary>
private float targerProgress;
/// <summary>
/// 开始进度
/// </summary>
private float beginProgress;
/// <summary>
/// 加载完成的等待时间
/// </summary>
public float LoadingCompleteWaitTime { get; private set; }
/// <summary>
/// 表现进度
/// </summary>
public float ShowProgress { get; private set; }
public void SetInfo(float changeProgressTime, float loadingCompleteWaitTime)
{
this.changeProgressTime = Mathf.Max(0f, changeProgressTime);
LoadingCompleteWaitTime = Mathf.Max(0f, loadingCompleteWaitTime);
preGetTime = Time.realtimeSinceStartup;
beginProgress = 0f;
targerProgress = 0f;
ShowProgress = 0f;
}
public void Update(float realProgress)
{
if (0f >= changeProgressTime) // 没有插值时间
{
targerProgress = realProgress;
preGetTime = Time.realtimeSinceStartup;
ShowProgress = targerProgress;
return;
}
float realtimeSinceStartup = Time.realtimeSinceStartup;
if (!Mathf.Approximately(targerProgress, realProgress))
{
preGetTime = realtimeSinceStartup;
beginProgress = ShowProgress;
targerProgress = realProgress;
}
float timer = realtimeSinceStartup - preGetTime;
ShowProgress = Mathf.Lerp(beginProgress, targerProgress, Mathf.Clamp01(timer / changeProgressTime));
}
}
}