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

80 lines
2.5 KiB
C#
Raw Normal View History

2024-01-10 18:30:01 +08:00
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()
{
2024-01-11 18:32:08 +08:00
UIManager.Instance.HideAllUI();
2024-01-10 18:30:01 +08:00
_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;
2024-01-11 18:32:08 +08:00
_campSceneManager = CommonUtils.GetSceneRootComponent<CampSceneManager>(sceneHandle.Scene);
2024-01-10 18:30:01 +08:00
if (_campSceneManager == null)
{
DebugUtil.LogError($"无法进入营地场景,campSceneManager不存在,scene path:{CAMP_SCENE_PATH}");
_currProcess = EProcess.None;
return;
}
2024-01-11 18:32:08 +08:00
await _campSceneManager.Refresh();
2024-01-10 18:30:01 +08:00
_currProcess = EProcess.Present;
}
public async void ExitCamp()
{
//todo关闭UI
await GameSceneManager.Instance.UnLoadSceneAsync(CAMP_SCENE_PATH);
_currProcess = EProcess.None;
2024-01-11 18:32:08 +08:00
UIManager.Instance.ShowAllUI();
2024-01-10 18:30:01 +08:00
}
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;
}
}
}