/// <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; } }
public override UIPanelBase.PanelData GetPanelData() { UIPanelBase.PanelData pd = base.GetPanelData(); pd.Data = false; return(pd); }
/// <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); } } } }
/// <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); }
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(); } }
/// <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(); }