Example #1
0
 void HidePanel(UIPanelLayerData panelLayerData, bool destroy = false)
 {
     panelLayerData.active = false;
     if (panelLayerData.gameObject != null)
     {
         if (panelLayerData.panel != null)
         {
             if (panelLayerData.gameObject.activeSelf)
             {
                 panelLayerData.panel.CloseView();
             }
             if (destroy)
             {
                 panelLayerData.panel.DestroyView();
             }
         }
         if (destroy)
         {
             //归还gameobject给对象池
             App.ObjectPoolManager.Release(panelLayerData.resourceName, panelLayerData.gameObject);
             panelLayerData.canvas     = null;
             panelLayerData.gameObject = null;
             panelLayerData.panel      = null;
             panelLayerData.intent     = null;
             panelLayerData.doInstance = false;
             CleanLayerUid();
         }
         else
         {
             panelLayerData.gameObject.SetActive(false);
         }
     }
 }
Example #2
0
        void ShowPanel(UIPanelLayerData panelLayerData)
        {
            panelLayerData.active = true;
            UIPanelData panelData = GetPanelData(panelLayerData.name);

            m_OpenRequest.Add(panelLayerData);
            if (panelLayerData.gameObject == null)
            {
                if (!panelLayerData.doInstance)
                {
                    panelLayerData.doInstance = true;
                    App.ObjectPoolManager.Instantiate(panelLayerData.resourceName, (GameObject obj) =>
                    {
                        panelLayerData.gameObject           = obj;
                        panelLayerData.canvas               = obj.GetComponent <Canvas>();
                        panelLayerData.panel                = obj.GetComponent <Panel>();
                        panelLayerData.canvas.worldCamera   = this.m_UICamera;
                        panelLayerData.canvas.sortingOrder  = panelLayerData.zIndex;
                        panelLayerData.canvas.planeDistance = 1;
                        panelLayerData.panel.UpdateChildrenOrder(panelLayerData.zIndex);
                        panelLayerData.gameObject.name = panelLayerData.name;
                        panelLayerData.gameObject.transform.SetParent(this.m_UIRoot.transform);
                        panelLayerData.gameObject.transform.localScale    = Vector3.one;
                        panelLayerData.gameObject.transform.localPosition = Vector3.zero;
                    });
                }
            }
            else
            {
                panelLayerData.canvas.sortingOrder = panelLayerData.zIndex;
                panelLayerData.panel.UpdateChildrenOrder(panelLayerData.zIndex);
                panelLayerData.gameObject.name = panelLayerData.name;
                panelLayerData.gameObject.transform.SetParent(this.m_UIRoot.transform);
                panelLayerData.gameObject.transform.localScale    = Vector3.one;
                panelLayerData.gameObject.transform.localPosition = Vector3.zero;
                bool needOpenView = !panelLayerData.gameObject.activeSelf;
                if (!panelLayerData.inited)
                {
                    panelLayerData.inited = true;
                    if (panelLayerData.panel != null && !panelLayerData.panel.isInited)
                    {
                        panelLayerData.gameObject.SetActive(true);
                        panelLayerData.panel.InitView(panelData.canRepeat);
                        needOpenView = true;
                    }
                }
                if (needOpenView)
                {
                    panelLayerData.gameObject.SetActive(true);
                    if (panelLayerData.panel != null)
                    {
                        panelLayerData.panel.OpenView();
                        panelLayerData.intent = null;
                    }
                }
            }
        }
Example #3
0
 IEnumerator _DealOpenRequest()
 {
     while (m_OpenRequest.Count > 0)
     {
         UIPanelLayerData panelLayerData = m_OpenRequest[0];
         if (panelLayerData.gameObject != null)
         {
             UIPanelData panelData    = GetPanelData(panelLayerData.name);
             bool        needOpenView = !panelLayerData.gameObject.activeSelf;
             if (!panelLayerData.inited)
             {
                 panelLayerData.inited = true;
                 if (panelLayerData.panel != null && !panelLayerData.panel.isInited)
                 {
                     panelLayerData.gameObject.SetActive(true);
                     panelLayerData.panel.InitView(panelLayerData.gameObject);
                     needOpenView = true;
                 }
             }
             while (!panelLayerData.panel.isInited)
             {
                 yield return(new WaitForEndOfFrame());
             }
             if (needOpenView)
             {
                 panelLayerData.gameObject.SetActive(true);
                 if (panelLayerData.panel != null)
                 {
                     panelLayerData.panel.OpenView(panelLayerData.intent);
                     panelLayerData.intent = null;
                 }
             }
             if (!panelLayerData.active)
             {
                 HidePanel(panelLayerData);
             }
             m_OpenRequest.Remove(panelLayerData);
         }
         yield return(new WaitForEndOfFrame());
     }
     if (m_OpenRequestFinalHide != null)
     {
         for (int i = 0; i < m_OpenRequestFinalHide.Count; i++)
         {
             HidePanel(m_OpenRequestFinalHide[i]);
         }
     }
     m_OpenRequestFinalHide = null;
     m_OpenRequestDeal      = null;
 }
Example #4
0
        public void BackOverLayer(string panelName)
        {
            UIPanelLayerData topPanel  = GetTopPanel(UILayerType.NormalLayer);
            UIPanelLayerData overPanel = GetPanelLayer(UILayerType.OverLayer, panelName);

            if (topPanel != null && overPanel != null)
            {
                if (topPanel.topOverLayer.IndexOf(overPanel) != -1)
                {
                    topPanel.topOverLayer.Remove(overPanel);
                    SortPanelLayer();
                }
            }
        }
Example #5
0
 //释放所有的panel
 public void ReleaseAllPanel()
 {
     m_OpenRequest.Clear();
     foreach (var item in m_PanelLayerMap)
     {
         List <UIPanelLayerData> panelLayerList = item.Value;
         for (int j = 0; j < panelLayerList.Count; j++)
         {
             UIPanelLayerData panelLayer = panelLayerList[j];
             HidePanel(panelLayer, true);
         }
     }
     ResetLayer();
 }
Example #6
0
        public void TopOverLayer(string panelName)
        {
            UIPanelLayerData topPanel  = GetTopPanel(UILayerType.NormalLayer);
            UIPanelLayerData overPanel = GetPanelLayer(UILayerType.OverLayer, panelName);

            if (topPanel != null && overPanel != null)
            {
                if (topPanel.topOverLayer.IndexOf(overPanel) == -1)
                {
                    //overPanel.intent = intent;
                    topPanel.topOverLayer.Add(overPanel);
                    SortPanelLayer();
                }
            }
        }
Example #7
0
        //打开panel
        public void OpenPanel(string name, object intent = null)
        {
            UIPanelData panelData = GetPanelData(name);

            if (panelData != null)
            {
                int curUid = m_LayersUidMap[panelData.layerLevel];
                List <UIPanelLayerData> panelLayerList = m_PanelLayerMap[panelData.layerType];
                UIPanelLayerData        panelLayerLast = null;

                //在此UI的层中检测 此UI是否已经打开以及是否可以重复打开
                for (int i = panelLayerList.Count - 1; i >= 0; i--)
                {
                    if (panelLayerList[i].name == name)
                    {
                        if (panelLayerList[i].active)
                        {
                            if (panelData.canRepeat)
                            {
                                break;
                            }
                            Debugger.LogError("Panel:" + name + " Already Opened. If You Want to Open Many, Please Set 'canRepeat' True in Register.");
                            return;
                        }
                        else
                        {
                            panelLayerLast = panelLayerList[i];
                            break;
                        }
                    }
                }
                if (panelLayerLast == null)
                {
                    //从未打开过,需要将UI的数据加入到 此UI的层次list里面
                    UIPanelLayerData layerData = new UIPanelLayerData();
                    layerData.name         = name;
                    layerData.resourceName = panelData.resourceName;
                    layerData.uid          = curUid;
                    layerData.baseUid      = curUid;
                    layerData.intent       = intent;
                    layerData.level        = panelData.layerLevel;
                    panelLayerList.Add(layerData);
                    m_LayersUidMap[layerData.level]++;
                }
                SortPanelLayer();
            }
        }
Example #8
0
        void CleanLayerUid()
        {
            Dictionary <UILayerLevel, int> topLayerUid = new Dictionary <UILayerLevel, int>();

            topLayerUid.Add(UILayerLevel.Level0, 1);
            topLayerUid.Add(UILayerLevel.Level1, 1);

            foreach (var item in m_PanelLayerMap)
            {
                UIPanelLayerData panelTopLayer = GetTopPanel(item.Key);
                if (panelTopLayer != null)
                {
                    if (panelTopLayer.baseUid > topLayerUid[panelTopLayer.level])
                    {
                        topLayerUid[panelTopLayer.level] = panelTopLayer.baseUid;
                    }
                }
            }
            m_LayersUidMap = topLayerUid;
        }
Example #9
0
 void _ClosePanel(string panelName, bool reopen)
 {
     foreach (var item in m_PanelLayerMap)
     {
         List <UIPanelLayerData> panelLayerList = item.Value;
         for (int j = panelLayerList.Count - 1; j >= 0; j--)
         {
             UIPanelLayerData panelLayer = panelLayerList[j];
             if (panelLayer.name == panelName)
             {
                 HidePanel(panelLayer, true);
                 panelLayerList.RemoveAt(j);
                 m_OpenRequest.Remove(panelLayer);
                 if (reopen)
                 {
                     SortPanelLayer();
                 }
                 return;
             }
         }
     }
 }
Example #10
0
        public void SortPanelLayer()
        {
            //baseUid是UI打开的基础顺序,uid是计算打开层级的基础值,zindex是具体的打开canvas层级
            //对每层UI的uid进行重置
            foreach (var item in m_PanelLayerMap)
            {
                List <UIPanelLayerData> panelLayerList = item.Value;
                for (int j = 0; j < panelLayerList.Count; j++)
                {
                    UIPanelLayerData panelLayer = panelLayerList[j];
                    panelLayer.uid = panelLayer.baseUid;
                }
            }
            List <UIPanelLayerData> normalLayerList = m_PanelLayerMap[UILayerType.NormalLayer];
            List <UIPanelLayerData> overLayerList   = m_PanelLayerMap[UILayerType.OverLayer];
            List <UIPanelLayerData> topLayerList    = m_PanelLayerMap[UILayerType.TopLayer];
            List <UIPanelLayerData> needShow        = new List <UIPanelLayerData>();
            List <UIPanelLayerData> needHide        = new List <UIPanelLayerData>();

            int topUid = -1;

            if (normalLayerList.Count > 0)
            {
                UIPanelLayerData topPanelLayer = GetTopPanel(UILayerType.NormalLayer);
                topUid = topPanelLayer.uid;

                //topOverLayer是存储固定浮在一个UI界面上面的界面,例如在选人界面上面的玩家的金币UI
                List <UIPanelLayerData> topPanel = topPanelLayer.topOverLayer;

                //对于悬浮的界面的排序基值进行计算
                for (int i = 0; i < topPanel.Count; i++)
                {
                    topPanel[i].uid = topPanelLayer.uid + 1 + i;
                }

                //对于普通UI层的UI进行显示与隐藏
                for (int i = normalLayerList.Count - 1; i >= 0; i--)
                {
                    if (normalLayerList[i] != topPanelLayer)
                    {
                        needHide.Add(normalLayerList[i]);
                    }
                    else
                    {
                        needShow.Add(normalLayerList[i]);
                    }
                }
            }

            //所有UI的zIndex计算
            foreach (var item in m_PanelLayerMap)
            {
                List <UIPanelLayerData> panelLayerList = item.Value;
                for (int j = 0; j < panelLayerList.Count; j++)
                {
                    UIPanelLayerData panelLayer = panelLayerList[j];
                    panelLayer.zIndex = UIManager.UILayerLevelBaseSpacing[(int)panelLayer.level] + UIManager.UIPanelSpacing * panelLayer.uid;
                }
            }

            //OverLayer进行显示与隐藏计算
            for (int i = overLayerList.Count - 1; i >= 0; i--)
            {
                if (topUid < 0 || topUid < overLayerList[i].uid)
                {
                    needShow.Add(overLayerList[i]);
                }
                else
                {
                    needHide.Add(overLayerList[i]);
                }
            }

            //top层全显示
            for (int i = topLayerList.Count - 1; i >= 0; i--)
            {
                needShow.Add(topLayerList[i]);
            }
            m_OpenRequestFinalHide = needHide;
            for (int i = 0; i < needShow.Count; i++)
            {
                ShowPanel(needShow[i]);
            }
            //////////////////////////////////////////////////////
            if (m_OpenRequestDeal != null)
            {
                StopCoroutine(m_OpenRequestDeal);
                m_OpenRequestDeal = null;
            }
            if (m_OpenRequest.Count > 0 && m_OpenRequestDeal == null)
            {
                m_OpenRequestDeal = StartCoroutine(_DealOpenRequest());
            }
        }