IEnumerator WaitToDestoryAllObjects()
        {
            while (BibaSceneStack.Count > 0)
            {
                var lastMenuStateGO = BibaSceneStack.GetTopGameObjectForTopMenuState();
                var lastMenuState   = BibaSceneStack.Pop();

                if (lastMenuState is SceneMenuState)
                {
                    GameObject.Destroy(lastMenuStateGO);
                    while (lastMenuStateGO != null)
                    {
                        yield return(null);
                    }
                    SceneManager.UnloadScene(lastMenuState.SceneName);
                }
                else
                {
                    ToggleObjectMenuStateSignal.Dispatch(lastMenuState as ObjectMenuState, false);
                }
            }

            Resources.UnloadUnusedAssets();
            Release();
        }
 void PushMenuStateOnStack()
 {
     if (BibaSceneStack.Contains(NextMenuState))
     {
         return;
     }
     BibaSceneStack.Push(NextMenuState);
 }
        void RemoveLastGameView()
        {
            var lastMenuStateGO = BibaSceneStack.GetTopGameObjectForTopMenuState();
            var lastMenuState   = BibaSceneStack.Pop();

            if (lastMenuState is SceneMenuState)
            {
                Retain();
                new Task(WaitTilObjectDestroy(lastMenuState, lastMenuStateGO), true);
            }
            else
            {
                ToggleObjectMenuStateSignal.Dispatch(lastMenuState as ObjectMenuState, false);
            }
        }
Exemple #4
0
        void ProcessPopupMenuState()
        {
            var lastMenuState = BibaSceneStack.Peek();

            //Fullscreen SceneMenuState -> Popup SceneMenuState or ObjectMenuState
            if (lastMenuState.FullScreen)
            {
                PushMenuStateSignal.Dispatch(NextMenuState);
            }
            //Popup SceneMenuState or ObjectMenuState -> Popup SceneMenuState or ObjectMenuState
            else
            {
                ReplaceMenuStateSignal.Dispatch(NextMenuState);
            }
        }
Exemple #5
0
        void ProcessFullScreenMenuState()
        {
            if (BibaSceneStack.Count == 0)
            {
                SwitchSceneMenuStateSignal.Dispatch(NextMenuState);
                return;
            }

            var lastMenuState = BibaSceneStack.Peek();

            if (lastMenuState == NextMenuState)
            {
                throw new Exception("Should not be able to transit to the same state.");
            }

            if (lastMenuState.FullScreen)
            {
                //Last MenuState is a Fullscreen SceneMenuState

                //Fullscreen SceneMenuState -> FullScreen SceneMenuState
                SwitchSceneMenuStateSignal.Dispatch(NextMenuState);
            }
            else
            {
                //Last MenuState is a Popup SceneMenuState or ObjectMenuState

                //Popup SceneMenuState or ObjectMenuState -> FullScreen SceneMenuState
                if (BibaSceneStack.Contains(NextMenuState))
                {
                    PopMenuStateSignal.Dispatch(NextMenuState);
                }
                else
                {
                    SwitchSceneMenuStateSignal.Dispatch(NextMenuState);
                }
            }
        }
        void LinkMenuStateWithGameObject()
        {
            var go = GameObject.Find(NextMenuState.SceneName);

            BibaSceneStack.LinkMenuStateWithGameObject(NextMenuState, go);
        }