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