private void ExecuteNavigationLogic(UIControllerBase baseWindow) { WindowConfigData windowData = baseWindow.UIConfigData; //1. 是导航UI 就保存当前显示的UI后 保存他们信息 if (baseWindow.IsNavigationTypeUI) { //保存当前UI信息 PushCurrentUIInfoToStack(baseWindow); } else if (baseWindow.UIConfigData.showMode == UIWindowShowMode.HideOtherWindow) {//导航类型的UI打开也会关闭所有UI, 避免冲突. HideAllShownWindow(); } //2. 主UI就重置导航信息Stack, 主UI是所有导航的根 if (baseWindow.UIConfigData.forceClearNavigation) { Debug.Log("<color=cyan>## [进入主UI, reset the backSequenceData for the navigation system.]##</color>"); ClearBackSequence(); } else { //3. 如果一个UI经过导航,到了关卡UI, 进入战斗后战斗UI不保存导航信息, 战斗失败可以选择回到关卡UI或者装备强化UI //选择关卡UI需要继续原来的导航, 选择进入强化UI就需要清除所有的导航信息. //if( condition from config, if need to check navigation) //CheckBackSequenceData(baseWindow); } }
private void PushCurrentUIInfoToStack(UIControllerBase targetWindow) { WindowConfigData configData = targetWindow.UIConfigData; bool dealBackSequence = true; if (dicShownWindows.Count > 0 && dealBackSequence) { List <WindowID> removedKey = null; List <UIControllerBase> sortedHiddenWindows = new List <UIControllerBase>();//当前所有的UI, 除了Fiex类型的 //如果当前打开的UI是关闭其他UI的类型 != UIWindowShowMode.DoNothing //保存当前显示的UI信息, UI类型是Fixed的除外,这种一直存在的UI不关闭 NavigationData backData = new NavigationData(); foreach (KeyValuePair <int, UIControllerBase> window in dicShownWindows) { if (configData.showMode != UIWindowShowMode.DoNothing) { if (window.Value.UIConfigData.windowType == UIWindowType.Fixed) { continue; } if (removedKey == null) { removedKey = new List <WindowID>(); } removedKey.Add((WindowID)window.Key); window.Value.HideWindowDirectly(); } if (window.Value.UIConfigData.windowType != UIWindowType.Fixed) { sortedHiddenWindows.Add(window.Value); } } //如果当前是强关其他UI类型的, 关闭其他UI if (removedKey != null) { for (int i = 0; i < removedKey.Count; i++) { dicShownWindows.Remove((int)removedKey[i]); } } // Push new navigation data if (configData.navigationMode == UIWindowNavigationMode.NormalNavigation) { // 按Depth从小到大排序后 保存 sortedHiddenWindows.Sort(this.CompareUIDepthFun); List <WindowID> navHiddenWindows = new List <WindowID>(); for (int i = 0; i < sortedHiddenWindows.Count; i++) { WindowID pushWindowId = sortedHiddenWindows[i].ID; navHiddenWindows.Add(pushWindowId); } backData.showingUI = targetWindow; backData.beingHidedUI = navHiddenWindows; backSequence.Push(backData); } } }