using Cysharp.Threading.Tasks;
using PhxhSDK;
using PhxhSDK.Res;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Gameplay.SubSystems
{
///
/// 游戏场景的底层逻辑
///
public class GameSceneManager : Singlenton
{
private ISceneLoader _sceneLoader;
public ISceneLoader SceneLoader => _sceneLoader;
public GameSceneManager()
{
#if UNITY_EDITOR
if (!Application.isPlaying)
{
_sceneLoader = new SceneLoader_Fake();
return;
}
#endif
#if USE_YOO
_sceneLoader = new SceneLoader_YooAsset();
#else
_sceneLoader = new SceneLoader_Addressables();
#endif
}
public async UniTask LoadSceneAsync(string scenePath, LoadSceneMode mode = LoadSceneMode.Single)
{
return await _sceneLoader.LoadSceneAsync(scenePath, mode);
}
public async UniTask UnLoadSceneAsync(string scenePath)
{
await _sceneLoader.UnLoadSceneAsync(scenePath);
}
///
/// 返回场景加载的进度
///
///
/// 0-100的浮点数
public float GetSceneLoadingProgress(string scenePath)
{
return _sceneLoader.GetSceneLoadingProgress(scenePath);
}
// 这个方法目前看起来没有引用
// public SceneHandle GetLoadedSceneHandle(string scenePath)
// {
// scenePath = GetPostProcessedScenePath(scenePath);
// var op = _sceneOpDic.GetValueOrDefault(scenePath);
// if (op.Status == AsyncOperationStatus.Succeeded)
// {
// return new SceneHandle(op.Result.Scene);
// }
//
// return null;
// }
}
}