Exemplo n.º 1
0
    /// <summary>
    /// 执行panel显示
    /// </summary>
    /// <param name="panel"></param>
    /// <param name="data"></param>
    private void DoShowPanel(UIPanelBase panel, UIPanelBase.PanelData prePanelData = null, object data = null, UIPanelBase.PanelJumpData jumpData = null)
    {
        panel.PrePanelData = prePanelData;

        UIFrameManager.Instance.ShowUIFrame(panel);
        panel.ShowPanel(data, jumpData);
        if (panel.PanelInfo.CacheLv != PanelCacheLv.None)
        {
            CurShowCachePanel = panel.PanelId;
        }
    }
Exemplo n.º 2
0
 public override UIPanelBase.PanelData GetPanelData()
 {
     UIPanelBase.PanelData pd = base.GetPanelData();
     pd.Data = false;
     return(pd);
 }
Exemplo n.º 3
0
    /// <summary>
    /// 更新导航信息
    /// </summary>
    /// <param name="panelBase"></param>
    private void UpdateNavigationInfo(PanelID pid, bool ignoreCache)
    {
        LocalPanelInfo localPanelInfo = null;

        if (TryGetLocalPanelInfo(pid, out localPanelInfo))
        {
            if (localPanelInfo.IsStartPanel)
            {
                ClearCacheStack();
            }

            if ((localPanelInfo.HidePanelMask == 0 &&
                 localPanelInfo.CacheLv == PanelCacheLv.None))
            {
                return;
            }

            HideCondition condition = (info) =>
            {
                if (info != null && (localPanelInfo.IsMatchHideType(info.PType) ||
                                     localPanelInfo.CanCachePanel(info.PID)))
                {
                    return(true);
                }
                return(false);
            };


            List <UIPanelBase.PanelData> cachePanels = new List <UIPanelBase.PanelData>();
            if (showPanels.Count > 0 && condition != null)
            {
                List <PanelID> lstHide = new List <PanelID>();

                UIPanelBase.PanelData       panelBackspaceData = null;
                UIPanelBase.PanelReturnData lastReturnData     = (null != panelCacheStack && panelCacheStack.Count != 0) ? panelCacheStack.Peek() : null;
                bool           canCache  = (null == lastReturnData || lastReturnData.PID != pid);
                PanelID        tempPID   = PanelID.None;
                UIPanelBase    tempPBase = null;
                LocalPanelInfo tempInfo  = null;

                for (int i = 0, max = showPanels.Count; i < max; i++)
                {
                    tempPID   = (PanelID)showPanels[i];
                    tempPBase = GetPanel(tempPID);
                    if (null == tempPBase)
                    {
                        continue;
                    }
                    if (TryGetLocalPanelInfo(tempPID, out tempInfo) && condition(tempInfo))
                    {
                        lstHide.Add(tempPID);
                        if (!ignoreCache && canCache && localPanelInfo.CanCachePanel(tempPID))
                        {
                            panelBackspaceData = tempPBase.GetPanelData();
                            if (null == panelBackspaceData.JumpData)
                            {
                                panelBackspaceData.JumpData = new UIPanelBase.PanelJumpData();
                            }
                            panelBackspaceData.JumpData.IsBackspacing = true;
                            cachePanels.Add(panelBackspaceData);
                        }
                    }
                }

                if (cachePanels.Count > 0)
                {
                    cachePanels.Sort((left, right) =>
                    {
                        UIPanelBase pleft  = GetPanel(left.PID);
                        UIPanelBase pright = GetPanel(right.PID);
                        return(pleft.Depth - pright.Depth);
                    });

                    panelCacheStack.Push(new UIPanelBase.PanelReturnData()
                    {
                        PID            = pid,
                        CachePanelList = cachePanels,
                    });
                }

                for (int i = 0; i < lstHide.Count; i++)
                {
                    HidePanel(lstHide[i], false);
                }
            }
        }
    }
Exemplo n.º 4
0
 /// <summary>
 /// 显示面板
 /// </summary>
 /// <param name="panelId">面板id</param>
 /// <param name="showData">面板显示数据</param>
 /// <param name="data">面板传递参数</param>
 /// <param name="jumpData">面板跳转参数</param>
 public void ShowPanel(PanelID panelId, UIPanelBase.PanelData prePanelData = null, object data = null, UIPanelBase.PanelJumpData jumpData = null, bool forceClearCacheBack = false, bool forceResetPanel = false, Action <UIPanelBase> panelShowAction = null)
 {
     ShowPanel(panelId, prePanelData, false, data, jumpData, forceClearCacheBack, forceResetPanel, panelShowAction);
 }
Exemplo n.º 5
0
    private void ShowPanel(PanelID panelId, UIPanelBase.PanelData prePanelData, bool ignoreCache, object data = null
                           , UIPanelBase.PanelJumpData jumpData = null, bool forceClearCacheBack = false, bool forceResetPanel = false, Action <UIPanelBase> panelShowAction = null)
    {
        if (panelId == PanelID.LoadingPanel)
        {
            m_lstWaitingShow.Clear();
        }

        if (IsShowPanel(panelId))
        {
            //UIPanelBase pBase = GetPanel(panelId);
            //pBase.PrePanelData = prePanelData;
            //pBase.ShowPanel(data, jumpData: jumpData);
            //if (null != panelShowAction)
            //{
            //    panelShowAction.Invoke(pBase);
            //}
            Engine.Utility.Log.Warning(CLASS_NAME + "-> ShowPanel warning,panelId = {0} already show!", panelId.ToString());
            //return ;
        }

        //如果存在互斥面板已经显示则直接返回
        //不做互斥处理
        LocalPanelInfo panelInfo = null;

        if (!TryGetLocalPanelInfo(panelId, out panelInfo))
        {
            return;
        }
        if (!IsWaitingShow(panelId))
        {
            PanelShowData showData = new PanelShowData()
            {
                PID                 = panelId,
                PrePanelData        = prePanelData,
                Data                = data,
                JumpData            = jumpData,
                ForceClearCacheBack = forceClearCacheBack,
                ForceResetPanel     = forceResetPanel,
                IgnoreCache         = ignoreCache,
                PanelShowAction     = panelShowAction,
            };
            m_lstWaitingShow.Add(showData);
        }
        else
        {
            Engine.Utility.Log.Warning(CLASS_NAME + "-> ShowPanel failed,panelId = {0} already in waitingshow Quene !", panelId.ToString());
        }

        //列表容量保护
        if (m_lstWaitingShow.Count >= MAX_WAITING_SHOW_NUM)
        {
            m_lstWaitingShow = new List <PanelShowData>();
            ShowMain();
            return;
        }

        if (!IsPanelAssetReady(panelInfo))
        {
            ReadyPanelAsset(panelInfo);
        }
        else
        {
            ProccessPanelShowing();
        }
    }
Exemplo n.º 6
0
    /// <summary>
    ///  面板返回
    /// </summary>
    /// <param name="pid"></param>
    public void OnPanelCacheBack(PanelID pid = PanelID.None)
    {
        if (pid != PanelID.None && pid != CurShowCachePanel)
        {
            if (IsShowPanel(CurShowCachePanel))
            {
                HidePanel(CurShowCachePanel, false, null);
            }

            ShowMain();

            UIFrameManager.Instance.CheckCloseRightBtn();
            Engine.Utility.Log.Error("OnPanelCacheBack return {0},{1}", pid, CurShowCachePanel);
            return;
        }

        if (CurShowCachePanel != PanelID.None)
        {
            //内部跳转直接成功直接return
            UIPanelBase panelBase = GetPanel(CurShowCachePanel);
            if (null != panelBase && panelBase.ExecuteReturnLogic())
            {
                return;
            }
        }
        if (IsShowPanel(PanelID.TopBarPanel))
        {
            HidePanel(PanelID.TopBarPanel, false);
        }
        if (IsShowPanel(PanelID.CommonBgPanel))
        {
            HidePanel(PanelID.CommonBgPanel, false);
        }

        if (panelCacheStack.Count == 0)
        {
            if (IsShowPanel(CurShowCachePanel))
            {
                HidePanel(CurShowCachePanel, false, null);
            }

            ShowMain();

            UIFrameManager.Instance.CheckCloseRightBtn();

            return;
        }
        bool success = false;


        UIPanelBase.PanelReturnData panelReturnData = panelCacheStack.Peek();
        if (null != panelReturnData)
        {
            if (panelReturnData.PID == CurShowCachePanel)
            {
                panelCacheStack.Pop();
                success = true;
                Action returenAction = () =>
                {
                    CurShowCachePanel = PanelID.None;
                    if (null != panelReturnData.CachePanelList && panelReturnData.CachePanelList.Count > 0)
                    {
                        UIPanelBase.PanelData pd = null;
                        for (int i = 0; i < panelReturnData.CachePanelList.Count; i++)
                        {
                            pd = panelReturnData.CachePanelList[i];
                            if (null == pd)
                            {
                                continue;
                            }

                            ShowPanel(pd.PID, pd.PrePanelData, true, data: pd.Data, jumpData: pd.JumpData);
                        }
                    }
                };
                if (IsShowPanel(CurShowCachePanel))
                {
                    HidePanel(CurShowCachePanel, false, returenAction);
                }
                else
                {
                    returenAction.Invoke();
                }
            }
            else
            {
                Engine.Utility.Log.Error("PanelCacheBackError {0},{1}", panelReturnData.PID, CurShowCachePanel);
            }
        }

        if (!success)
        {
            ShowMain();
        }

        UIFrameManager.Instance.CheckCloseRightBtn();
    }