yyl
9 天以前 3bd7f56906e31e8fe0072108c9d4652707b51de8
Main/Manager/StageManager.cs
@@ -13,35 +13,60 @@
{
    public StageName currentStage;
    public Action AfterEnterGame;
    public Action AfterLoadingGameScene;
    public Action BeforeEnterGame;
    public Action BeforeLoadingGameScene;
    // public Action OnSwitchAccount;
    private LaunchWinData launchWinData = null;
    public void Init()
    {
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
    }
    public void Release()
    {
        AfterLoadingGameScene = null;
        BeforeLoadingGameScene = null;
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
    }
    public async UniTaskVoid ToLoginScene()
    {
        UIManager.Instance.DestroyAllUI();
        if (AssetSource.isUseAssetBundle)
        {
            AssetBundleUtility.Instance.Sync_LoadAll("maps/Login");
        }
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Login");
        await OnLoading(asyncOperation, ConfigManager.Instance.GetLoadingProgress);
        await OnLoading(asyncOperation, ConfigManager.Instance.GetLoadingProgress, Main.InitManagers);
        Main.OnSwitchToLoginScene();
        currentStage = StageName.Login;
        UIManager.Instance.OpenWindow<LaunchBackGroundWin>();
        UIManager.Instance.OpenWindow<LoginWin>();
    }
    // 返回登录界面 如断线
    public void ReturnToLoginScene()
    {
        UIManager.Instance.DestroyAllUI();
        SceneManager.LoadSceneAsync("Login");
        currentStage = StageName.Login;
        UIManager.Instance.OpenWindow<LaunchBackGroundWin>();
        UIManager.Instance.OpenWindow<LoginWin>();
        if (ServerForceExitHintWin.reason != 0)
        {
            UIManager.Instance.OpenWindow<ServerForceExitHintWin>();
        }
    }
    protected float GetManagerRequestDataProgress()
@@ -69,19 +94,25 @@
    public async UniTaskVoid ToGameScene()
    {
        UIManager.Instance.DestroyAllUI();
        AfterEnterGame?.Invoke();
        BeforeLoadingGameScene?.Invoke();
        // ResManager.Instance.PrewarmResources();
        if (AssetSource.isUseAssetBundle)
        {
            AssetBundleUtility.Instance.Sync_LoadAll("maps/Game");
        }
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Game");
        await OnLoading(asyncOperation, GetManagerRequestDataProgress);
        await OnLoading(asyncOperation, () => (DTC0403_tagPlayerLoginLoadOK.finishedLogin ? .5f : 0f) + GetManagerRequestDataProgress() * .5f);
        //  加载初始化数据完成
        currentStage = StageName.Game;
        BeforeEnterGame?.Invoke();
        Main.OnEnterGameScene();
        AfterLoadingGameScene?.Invoke();
        UIManager.Instance.OpenWindow<MainWin>();
    }
@@ -91,6 +122,18 @@
        asyncOperation.allowSceneActivation = false;
        LoadingWin loadingWin = UIManager.Instance.OpenWindow<LoadingWin>();
        LaunchWin launchWin = UIManager.Instance.GetUI<LaunchWin>();
        if (null != launchWin && launchWin.IsActive() && launchWinData == null)
        {
            launchWinData = launchWin.GetData();
        }
        if (null != launchWinData)
        {
            loadingWin.SetData(launchWinData);
            launchWinData = null;
        }
        while (!asyncOperation.isDone)
        {
@@ -126,4 +169,12 @@
        loadingWin.CloseWindow();
    }
    private void OnCloseWindow(UIBase closeUI)
    {
        if (closeUI is LaunchWin)
        {
            launchWinData = (closeUI as LaunchWin).GetData();
        }
    }
}