80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
using System.Linq;
|
||
using Gameplay;
|
||
using Gameplay.SubSystems;
|
||
using UnityEngine.SceneManagement;
|
||
|
||
public partial class CampManager
|
||
{
|
||
private const string CAMP_SCENE_PATH = "Assets/Scenes/CampScene.unity";
|
||
|
||
private enum EProcess
|
||
{
|
||
None = 0,
|
||
LoadingScene,
|
||
LoadingUI,
|
||
RefreshCamp,
|
||
Present,
|
||
}
|
||
|
||
private EProcess _currProcess = EProcess.None;
|
||
private CampSceneManager _campSceneManager;
|
||
|
||
public async void EnterCamp()
|
||
{
|
||
UIManager.Instance.HideAllUI();
|
||
_currProcess = EProcess.LoadingScene;
|
||
var loadingExecutor = new LoadingExecutorWithUILoadingController();
|
||
loadingExecutor.getProgress = GetLoadingProcess;
|
||
LoadingExecutorManager.Instance.ExecuteLoading(loadingExecutor);
|
||
var sceneHandle = await GameSceneManager.Instance.LoadSceneForUIView(CAMP_SCENE_PATH, LoadSceneMode.Additive);
|
||
if (sceneHandle == null)
|
||
{
|
||
DebugUtil.LogError($"无法进入营地场景,场景不存在,scene path:{CAMP_SCENE_PATH}");
|
||
_currProcess = EProcess.None;
|
||
return;
|
||
}
|
||
|
||
_currProcess = EProcess.LoadingUI;
|
||
//todo打开UI
|
||
_currProcess = EProcess.RefreshCamp;
|
||
_campSceneManager = CommonUtils.GetSceneRootComponent<CampSceneManager>(sceneHandle.Scene);
|
||
if (_campSceneManager == null)
|
||
{
|
||
DebugUtil.LogError($"无法进入营地场景,campSceneManager不存在,scene path:{CAMP_SCENE_PATH}");
|
||
_currProcess = EProcess.None;
|
||
return;
|
||
}
|
||
|
||
await _campSceneManager.Refresh();
|
||
_currProcess = EProcess.Present;
|
||
}
|
||
|
||
public async void ExitCamp()
|
||
{
|
||
//todo关闭UI
|
||
await GameSceneManager.Instance.UnLoadSceneAsync(CAMP_SCENE_PATH);
|
||
_currProcess = EProcess.None;
|
||
UIManager.Instance.ShowAllUI();
|
||
}
|
||
|
||
private float GetLoadingProcess()
|
||
{
|
||
switch (_currProcess)
|
||
{
|
||
case EProcess.None:
|
||
return 0;
|
||
case EProcess.LoadingScene:
|
||
//加载场景只占50%
|
||
return GameSceneManager.Instance.GetSceneLoadingProgress(CAMP_SCENE_PATH) * 50f;
|
||
case EProcess.LoadingUI:
|
||
return 60f;
|
||
case EProcess.RefreshCamp:
|
||
//刷新场景要加载预制体和模型等
|
||
return 60 + _campSceneManager.GetRefreshProcess() * 40f;
|
||
case EProcess.Present:
|
||
return 100;
|
||
default:
|
||
return 0;
|
||
}
|
||
}
|
||
} |