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

80 lines
2.5 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 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;
}
}
}