using System.Linq;
using cfg.ShowCfg;
using Gameplay;
using Gameplay.SubSystems;
using PhxhSDK;
using UnityEngine;
using UnityEngine.SceneManagement;
using static Gameplay.CommonUtils;
public partial class CampManager
{
///
/// 进度
///
private enum EProcess
{
None = 0,
///
/// 加载场景
///
LoadingScene,
///
/// 加载UI
///
LoadingUI,
///
/// 刷新营地
///
RefreshCamp,
///
/// 当前
///
Present,
}
private EProcess curProcess = EProcess.None;
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;
ShowComponent showComponent = GetSceneRootComponent(uiSceneResult.sceneHandle.Scene);
if (showComponent == null)
{
DebugUtil.LogError($"无法进入营地场景,{typeof(ShowComponent).Name}不存在,scene path:{Framework.Constants.CAMP_SCENE_PATH}");
curProcess = EProcess.None;
return;
}
await ShowManager.Instance.RefreshShow(E_ShowSceneType.Camp);
curProcess = EProcess.Present;
}
///
/// 退出营地
///
public async void ExitCamp()
{
await CloseUIWithScene(UINameConst.UI_Camp);
curProcess = EProcess.None;
}
///
/// 获取加载进度
///
/// 0f-100f
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.Instance.GetRefreshProcess(E_ShowSceneType.Camp) * 40f,
EProcess.Present => 100f,
_ => 0f,
};
}
}