NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Camp/CampManager.SceneLogic.cs

92 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Linq;
using Gameplay;
using Gameplay.SubSystems;
using PhxhSDK;
using UnityEngine;
using UnityEngine.SceneManagement;
using static Gameplay.CommonUtils;
public partial class CampManager
{
/// <summary>
/// 进度
/// </summary>
private enum EProcess
{
None = 0,
/// <summary>
/// 加载场景
/// </summary>
LoadingScene,
/// <summary>
/// 加载UI
/// </summary>
LoadingUI,
/// <summary>
/// 刷新营地
/// </summary>
RefreshCamp,
/// <summary>
/// 当前
/// </summary>
Present,
}
private EProcess curProcess = EProcess.None;
/// <summary>
/// 演出管理器
/// </summary>
private ShowManager showManager;
public async void EnterCamp()
{
UIManager.Instance.HideAllUI();
curProcess = EProcess.LoadingScene;
LoadingExecutorWithUILoadingController loadingExecutor = new()
{
getProgress = GetLoadingProcess
};
LoadingExecutorManager.Instance.ExecuteLoading(loadingExecutor);
UISceneResult uiSceneResult = await OpenUIWithScene(UINameConst.UI_Camp, Framework.Constants.CAMP_SCENE_PATH, null, false);
curProcess = EProcess.RefreshCamp;
showManager = GetSceneRootComponent<ShowManager>(uiSceneResult.sceneHandle.Scene);
if (showManager == null)
{
DebugUtil.LogError($"无法进入营地场景campSceneManager不存在,scene path:{Framework.Constants.CAMP_SCENE_PATH}");
curProcess = EProcess.None;
return;
}
await showManager.RefreshShow();
curProcess = EProcess.Present;
}
/// <summary>
/// 退出营地
/// </summary>
public async void ExitCamp()
{
await CloseUIWithScene(UINameConst.UI_Camp);
curProcess = EProcess.None;
}
/// <summary>
/// 获取加载进度
/// </summary>
/// <returns>0f-100f</returns>
private float GetLoadingProcess()
{
return curProcess switch
{
EProcess.None => 0f,
EProcess.LoadingScene => GameSceneManager.Instance.GetSceneLoadingProgress(Framework.Constants.CAMP_SCENE_PATH) * 0.5f,
EProcess.LoadingUI => 60f,
EProcess.RefreshCamp => 60f + showManager.GetRefreshProcess() * 40f,
EProcess.Present => 100f,
_ => 0f,
};
}
}