private void ExecuteNavigationLogic(UIWindowBase baseWindow, ShowWindowData showData) { WindowCoreData windowData = baseWindow.windowData; if (baseWindow.RefreshBackSeqData) { RefreshBackSequenceData(baseWindow, showData); } else if (windowData.showMode == UIWindowShowMode.HideOtherWindow) { HideAllShownWindow(); } // If target window is mark as force clear all the navigation sequence data // Show data need force clear the back seq data if (baseWindow.windowData.forceClearNavigation || (showData != null && showData.forceClearBackSeqData)) { Debug.Log("<color=#2a5caa>## [Enter the start window, reset the backSequenceData for the navigation system.]##</color>"); ClearBackSequence(); } else { if ((showData != null && showData.checkNavigation)) { CheckBackSequenceData(baseWindow); } } }
private void RefreshBackSequenceData(UIWindowBase targetWindow, ShowWindowData showData) { WindowCoreData coreData = targetWindow.windowData; if (dicShownWindows.Count == 0) { return; } List <WindowID> removedKey = null; List <UIWindowBase> sortedHiddenWindows = new List <UIWindowBase>(); NavigationData backData = new NavigationData(); foreach (KeyValuePair <WindowID, UIWindowBase> window in dicShownWindows) { if (coreData.showMode != UIWindowShowMode.DoNothing) { if (window.Value.windowData.windowType == UIWindowType.BackgroundLayer) { continue; } if (removedKey == null) { removedKey = new List <WindowID>(); } removedKey.Add(window.Key); window.Value.HideWindowDirectly(); } if (window.Value.windowData.windowType != UIWindowType.BackgroundLayer) { sortedHiddenWindows.Add(window.Value); } } if (removedKey != null) { for (int i = 0; i < removedKey.Count; i++) { dicShownWindows.Remove(removedKey[i]); } } // Push new navigation data if (coreData.navigationMode == UIWindowNavigationMode.NormalNavigation && (showData == null || (!showData.ignoreAddNavData))) { // Add to return show target list sortedHiddenWindows.Sort(this.compareWindowFun); List <WindowID> navHiddenWindows = new List <WindowID>(); for (int i = 0; i < sortedHiddenWindows.Count; i++) { WindowID pushWindowId = sortedHiddenWindows[i].ID; navHiddenWindows.Add(pushWindowId); } backData.CloseTargetWindow = targetWindow; backData.backShowTargets = navHiddenWindows; backSequence.Push(backData); Debug.Log("<color=#2a5caa>### !!!Push new Navigation data!!! ###</color>"); } }