NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/SubSystems/LoadingManager.cs

171 lines
4.0 KiB
C#

using Cysharp.Threading.Tasks;
using Framework;
using PhxhSDK;
using UnityEngine;
namespace Gameplay.SubSystems
{
/// <summary>
/// 加载管理器
/// </summary>
public class LoadingManager : Singlenton<LoadingManager>, IInitable
{
/// <summary>
/// 当前加载
/// </summary>
private LoadingExecutor curLoadingExecutor;
/// <summary>
/// 加载表现
/// </summary>
private LoadingDisplay loadingDisplay;
#region 属性
/// <summary>
/// 是否正在运行
/// </summary>
public bool IsRuning
{
get
{
if (null == curLoadingExecutor)
return false;
return curLoadingExecutor.IsRunning;
}
}
/// <summary>
/// 实际进度
/// </summary>
public float Progress
{
get
{
if (null == curLoadingExecutor)
return 0f;
return curLoadingExecutor.Progress;
}
}
/// <summary>
/// 表现进度
/// </summary>
public float ShowProgress
{
get
{
if (null == loadingDisplay)
return Progress;
loadingDisplay.Update(Progress);
return loadingDisplay.ShowProgress;
}
}
/// <summary>
/// 是否等待中
/// </summary>
public bool IsWait
{
get
{
if (null == curLoadingExecutor)
return true;
return curLoadingExecutor.IsWait;
}
set
{
curLoadingExecutor.IsWait = value;
}
}
#endregion
public void Init()
{
loadingDisplay = new();
}
public void Release()
{
loadingDisplay = null;
}
/// <summary>
/// 开始加载
/// </summary>
/// <param name="executer">加载器</param>
/// <param name="changeProgressTime">进度变化平滑插值时间</param>
/// <param name="loadingCompleteWaitTime">加载完成后的等待时间</param>
/// <returns></returns>
public async UniTask ExecuteLoading(LoadingExecutor executer, float changeProgressTime = 1f, float loadingCompleteWaitTime = 0.2f)
{
if (null == executer)
{
DebugUtil.LogError("错误,启动空的加载器");
return;
}
if (IsRuning)
{
DebugUtil.LogError("错误,有加载器没有加载完");
return;
}
changeProgressTime = Mathf.Max(0f, changeProgressTime);
loadingCompleteWaitTime = Mathf.Max(0f, loadingCompleteWaitTime);
loadingDisplay.SetInfo(changeProgressTime);
curLoadingExecutor = executer;
await curLoadingExecutor.Excute(changeProgressTime + loadingCompleteWaitTime);
}
}
/// <summary>
/// loading界面类型
/// </summary>
public enum E_LoadingType
{
/// <summary>
/// 登录游戏
/// </summary>
Login,
/// <summary>
/// 通用加载
/// </summary>
CommonLoading,
/// <summary>
/// 通用快速黑屏加载
/// </summary>
QuickBlack,
}
/// <summary>
/// 加载结果
/// </summary>
public enum E_LoadingResult
{
/// <summary>
/// 完成加载
/// </summary>
Success = 0,
/// <summary>
/// 加载出错(测试)
/// </summary>
ErrorTest = 1,
/// <summary>
/// 启动游戏时网络连接出错
/// </summary>
GameStartSevNetError = 2,
/// <summary>
/// 当前设备网络问题
/// </summary>
DeviceNetError = 3,
}
}