예제 #1
0
    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);
        }
    }
예제 #2
0
    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);
            }
        }
    }