예제 #1
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        private PanelInfo FindPanelInfoByID(int uiID)
        {
            PanelInfo panelInfo = null;

            if (m_ActivePanelInfoMap.TryGetValue(uiID, out panelInfo))
            {
                return(panelInfo);
            }

            return(null);
        }
예제 #2
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
 private PanelInfo GetPanelFromActive(int uiID)
 {
     for (int i = m_ActivePanelInfoList.Count - 1; i >= 0; --i)
     {
         if (m_ActivePanelInfoList[i].uiID == uiID)
         {
             PanelInfo panel = m_ActivePanelInfoList[i];
             return(panel);
         }
     }
     return(null);
 }
예제 #3
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
 private PanelInfo GetPanelFromCache(int uiID, bool remove)
 {
     for (int i = m_CachedPanelList.Count - 1; i >= 0; --i)
     {
         if (m_CachedPanelList[i].uiID == uiID)
         {
             PanelInfo panel = m_CachedPanelList[i];
             if (remove)
             {
                 m_CachedPanelList.RemoveAt(i);
             }
             return(panel);
         }
     }
     return(null);
 }
예제 #4
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        private void AddPanelInfo(PanelInfo panelInfo)
        {
            if (panelInfo == null)
            {
                return;
            }

            if (m_ActivePanelInfoMap.ContainsKey(panelInfo.panelID))
            {
                Log.e("Already Add Panel to UIMgr");
                return;
            }

            m_ActivePanelInfoList.Add(panelInfo);
            m_ActivePanelInfoMap.Add(panelInfo.panelID, panelInfo);
            m_IsPanelInfoListChange = true;
        }
예제 #5
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        private void RemovePanelInfo(PanelInfo panelInfo)
        {
            if (panelInfo == null)
            {
                return;
            }

            if (!m_ActivePanelInfoMap.ContainsKey(panelInfo.panelID))
            {
                Log.e("Already Remove Panel:" + panelInfo.uiID);
                return;
            }

            m_ActivePanelInfoMap.Remove(panelInfo.panelID);
            m_ActivePanelInfoList.Remove(panelInfo);
            m_IsPanelInfoListChange = true;
        }
예제 #6
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        // public void HidePanel<T>(T uiID) where T : System.IConvertible
        // {

        //     PanelInfo panelInfo = LoadPanelInfo(uiID.ToInt32(null));
        //     if (panelInfo == null)
        //     {
        //         return;
        //     }

        //     panelInfo.SetActive(false);
        //     panelInfo.HidePanel();
        // }
        #endregion

        public bool ToggleShowPanel <T>(T uiID) where T : System.IConvertible
        {
            PanelInfo panelInfo = LoadPanelInfo(uiID.ToInt32(null));

            if (panelInfo == null)
            {
                return(false);
            }

            if (panelInfo.isOpen)
            {
                ClosePanel(panelInfo.abstractPanel);
                return(false);
            }
            else
            {
                OpenPanel(uiID, PanelSortType.Auto, null);
                return(true);
            }
        }
예제 #7
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        public void HidePanel(AbstractPanel panel)
        {
            if (panel == null)
            {
                return;
            }

            PanelInfo panelInfo = FindPanelInfoByID(panel.panelID);

            if (panelInfo == null)
            {
                panelInfo = GetPanelFromCache(panel.panelID, false);
                if (panelInfo == null)
                {
                    Log.e("Not Find PanelInfo For Panel" + panel.name);
                    // panel.OnPanelClose(true);
                    panel.gameObject.SetActive(false);
                }
                return;
            }
        }
예제 #8
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        private PanelInfo LoadPanelInfo(int uiID)
        {
            UIData data = UIDataTable.Get(uiID);

            if (data == null)
            {
                Log.e("#Not Find UIData for UIID:" + uiID);
                return(null);
            }

            bool      needAdd   = true;
            PanelInfo panelInfo = GetPanelFromCache(uiID, true);

            if (panelInfo == null)//没有缓存
            {
                if (data.isSingleton)
                {
                    panelInfo = GetPanelFromActive(uiID);
                }

                if (panelInfo == null)
                {
                    panelInfo = ObjectPool <PanelInfo> .S.Allocate();

                    panelInfo.Init(uiID, nextPanelID);
                }
                else
                {
                    needAdd = false;
                }
            }

            if (needAdd)
            {
                AddPanelInfo(panelInfo);
            }

            return(panelInfo);
        }
예제 #9
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        private void ClosePanelInfo(PanelInfo panelInfo)
        {
            if (panelInfo == null)
            {
                return;
            }

            UIData data    = UIDataTable.Get(panelInfo.uiID);
            bool   destory = true;

            if (data != null && data.cacheCount > 0)
            {
                if (GetActiveAndCachedUICount(panelInfo.uiID) <= data.cacheCount)
                {
                    destory = false;
                }
            }

            RemovePanelInfo(panelInfo);

            //恢复层级记录
            m_UIRoot.ReleasePanelSortingOrder(panelInfo.sortingOrder);

            if (destory)
            {
                panelInfo.ClosePanel(true);
            }
            else
            {
                m_CachedPanelList.Add(panelInfo);
                panelInfo.ClosePanel(false);
            }

            if (destory)
            {
                ObjectPool <PanelInfo> .S.Recycle(panelInfo);
            }
        }
예제 #10
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        public void ClosePanel(AbstractPanel panel)
        {
            if (panel == null)
            {
                return;
            }

            PanelInfo panelInfo = FindPanelInfoByID(panel.panelID);

            if (panelInfo == null)
            {
                panelInfo = GetPanelFromCache(panel.panelID, false);
                if (panelInfo == null)
                {
                    Log.e("Not Find PanelInfo For Panel" + panel.name);
                    panel.OnPanelClose(true);
                    GameObject.Destroy(panel.gameObject);
                }
                return;
            }

            ClosePanelInfo(panelInfo);
        }
예제 #11
0
파일: UIMgr.cs 프로젝트: tkonexhh/NewWorld
        public void OpenPanel <T>(T uiID, PanelSortType type, System.Action <AbstractPanel> callback, params object[] args) where T : System.IConvertible
        {
            PanelInfo panelInfo = LoadPanelInfo(uiID.ToInt32(null));

            if (panelInfo == null)
            {
                return;
            }

            panelInfo.sortingOrder = m_UIRoot.RequireNextPanelSortingOrder(type);
            panelInfo.AddOpenCallback(callback);

            if (panelInfo.isReady)
            {
                // Debug.LogError("panel is Ready");
            }
            else
            {
                panelInfo.LoadPanelRes();
            }

            panelInfo.SetActive(true);
            panelInfo.OpenPanel();
        }
예제 #12
0
 private int PanelCompare(PanelInfo a, PanelInfo b)
 {
     return(a.sortingOrder - b.sortingOrder);
 }