Esempio n. 1
0
    /// <summary>
    /// Cargamos una subscena de forma aditiva.
    /// </summary>
    /// <param name="subScene"></param>
    /// <param name="asyn"></param>
    public void LoadSubScene(string subScene, bool asyn = false, OnAsyncLoadingProgress onAsyncLoadingProgress = null)
    {
        TSceneInfo sceneInfo = m_stackScenes.Peek();

        if (!sceneInfo.subScenes.Contains(subScene))
        {
            //Carga de la subscena
            if (asyn)
            {
                //TODO 4 lanzamos la corrutina LoadingAdditiveAsync
                StartCoroutine(LoadingAdditiveAsync(subScene, false, onAsyncLoadingProgress));
            }
            else
            {
                SceneManager.LoadScene(subScene, LoadSceneMode.Additive);
                StoreSubSceneInCurrentScene(subScene);
            }
        }
        else // Si ya está cargada, como mucho podemos intentar activarla.
        {
            Scene scene = SceneManager.GetSceneByName(subScene);
            if (IsDesactivate(scene))
            {
                Activate(scene, true);
            }
        }
    }
Esempio n. 2
0
    protected void StoreSubSceneInCurrentScene(string subSceneName)
    {
        TSceneInfo info = m_stackScenes.Peek();

        if (!info.subScenes.Contains(subSceneName))
        {
            info.subScenes.Add(subSceneName);
        }
    }
Esempio n. 3
0
    protected TSceneInfo StoreLevelInfoInStack(string levelName)
    {
        TSceneInfo info = new TSceneInfo();

        info.name      = levelName;
        info.subScenes = new List <string>();
        m_stackScenes.Push(info);
        return(info);
    }
Esempio n. 4
0
    protected void SuspendScene(TSceneInfo sceneInfo)
    {
        foreach (string subScene in sceneInfo.subScenes)
        {
            Scene scene = SceneManager.GetSceneByName(subScene);
            Activate(scene, false);
        }

        Scene mainScene = SceneManager.GetSceneByName(sceneInfo.name);

        Activate(mainScene, false);
    }
Esempio n. 5
0
    protected void DestroyScene(TSceneInfo sceneInfo)
    {
        foreach (string subscenes in sceneInfo.subScenes)
        {
            SceneManager.UnloadSceneAsync(subscenes);
        }
        if (m_sceneDestroyCallbacks != null)
        {
            m_sceneDestroyCallbacks();
        }
        SceneManager.UnloadSceneAsync(sceneInfo.name);

        /*if (m_sceneDestroyCallbacks != null)
         *  m_sceneDestroyCallbacks();*/
    }
Esempio n. 6
0
    protected void BackToLifeScene(TSceneInfo sceneInfo)
    {
        foreach (string subScene in sceneInfo.subScenes)
        {
            Scene scene = SceneManager.GetSceneByName(subScene);
            if (IsDesactivate(scene))
            {
                Activate(scene, true);
            }
        }
        Scene mainScene = SceneManager.GetSceneByName(sceneInfo.name);

        if (IsDesactivate(mainScene))
        {
            Activate(mainScene, true);
        }
    }
Esempio n. 7
0
    /******** PILA DE ESCENAS ***********************/
    /// <summary>
    /// Cargamos uan escena de forma aditiva y la apilamos en nuestra pila de escenas, dejando la escena actual desactivada.
    /// </summary>
    /// <param name="sceneName"></param>
    /// <param name="asyn"></param>
    /// <param name="onAsyncLoadingProgress"></param>
    public void PushScene(string sceneName, bool asyn = false, OnAsyncLoadingProgress onAsyncLoadingProgress = null)
    {
        bool needLoading = true;

        if (m_stackScenes.Count > 0)
        {
            TSceneInfo current = m_stackScenes.Peek();
            if (current.name != sceneName)
            {
                SuspendScene(current);
            }
            else
            {
                needLoading = false;
                Scene scene = SceneManager.GetSceneByName(sceneName);
                if (IsDesactivate(scene))
                {
                    Activate(scene, true);
                }
            }
        }

        if (needLoading)
        {
            Scene scene = SceneManager.GetSceneByName(sceneName);
            if (scene.buildIndex >= 0 && IsDesactivate(scene))
            {
                Activate(scene, true);
                StoreLevelInfoInStack(sceneName);
            }
            else
            {
                if (asyn)
                {
                    StartCoroutine(LoadingAdditiveAsync(sceneName, true, onAsyncLoadingProgress));
                }
                else
                {
                    SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);
                    StoreLevelInfoInStack(sceneName);
                }
            }
        }
    }
Esempio n. 8
0
    /// <summary>
    /// Descargamos una subscena de la escena principal.
    /// </summary>
    /// <param name="subScene"></param>
    /// <param name="clearSubScene"></param>
    public void UnloadSubScene(string subScene, bool clearSubScene)
    {
        TSceneInfo current = m_stackScenes.Peek();

        if (current.subScenes.Contains(subScene))
        {
            if (clearSubScene)
            {
                current.subScenes.Remove(subScene);
                SceneManager.UnloadSceneAsync(subScene);
            }
            else
            {
                Scene scene = SceneManager.GetSceneByName(subScene);
                Activate(scene, false);
            }
        }

        //StoreSubSceneInCurrentScene(subScene);
    }
Esempio n. 9
0
    /// <summary>
    /// Desapilamos la escena apilada en la cima de la pila.
    /// </summary>
    /// <param name="clearCurrentScene"></param>
    public void PopScene(bool clearCurrentScene)
    {
        Debug.Assert(m_stackScenes.Count > 1, "Error, No hay escena a la cual volver");

        //TODO 5 desapilamos de la cima de la pila
        TSceneInfo current = m_stackScenes.Pop();

        //NOTA: Puede querer destruirla? en principio si...
        if (clearCurrentScene)
        {
            DestroyScene(current);
        }
        else
        {
            Scene scene = SceneManager.GetSceneByName(current.name);
            Activate(scene, false);
        }

        TSceneInfo previousScene = m_stackScenes.Peek();

        BackToLifeScene(previousScene);
    }