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); } }
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); } }
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); }