Exemple #1
0
        public void OnUIOpen(CUIWindowBase window)
        {
            switch (window.UIType)
            {
            case UIType.HUD:
                m_hudStack.Add(window);
                break;

            case UIType.Normal:
                m_normalStack.Add(window);
                break;

            case UIType.Dialog:
                m_dialogStack.Add(window);
                break;

            case UIType.Tips:
                m_tipsStack.Add(window);
                break;

            case UIType.Mask:
                m_maskStack.Add(window);
                break;
            }
        }
Exemple #2
0
        public void OnUIClose(CUIWindowBase ui)
        {
            switch (ui.UIType)
            {
            case UIType.HUD:
                m_hudStack.Remove(ui);
                break;

            case UIType.Normal:
                m_normalStack.Remove(ui);
                break;

            case UIType.Dialog:
                m_dialogStack.Remove(ui);
                break;

            case UIType.Tips:
                m_tipsStack.Remove(ui);
                break;

            case UIType.Mask:
                m_tipsStack.Remove(ui);
                break;
            }
        }
Exemple #3
0
        /// <summary>
        /// 从cache中删除ui, 如果不在列表里面, 就返回
        /// </summary>
        public static void RemoveUIFromCache(CUIWindowBase window, Dictionary <string, List <CUIWindowBase> > dict)
        {
            bool b = IsExitsInCache(window, dict);

            if (!b)
            {
                return;
            }

            if (window == null)
            {
                throw new Exception("UIManager: RemoveUI error l_UI is null: !");
            }

            if (!dict.ContainsKey(window.name))
            {
                throw new Exception("UIManager: RemoveUI error dont find: " + window.name + "  " + window);
            }

            if (!dict[window.name].Contains(window))
            {
                throw new Exception("UIManager: RemoveUI error dont find: " + window.name + "  " + window);
            }

            dict[window.name].Remove(window);
        }
Exemple #4
0
        public void CloseLastUIWindow(UIType uiType = UIType.Normal)
        {
            CUIWindowBase window = GetLastUI(uiType);

            if (window != null)
            {
                CUIManager.Instance.CloseUI(window);
            }
        }
Exemple #5
0
        public void DestroyUI(CUIWindowBase UI)
        {
            Debug.Log("UIManager DestroyUI " + UI.name);

            CUIManagerHelper.RemoveUIFromCache(UI, HiddenDict);
            CUIManagerHelper.RemoveUIFromCache(UI, ActiveDict);

            Destroy(UI.gameObject);
        }
Exemple #6
0
        /// <summary>
        /// 从隐藏状态中 显示ui,
        /// </summary>
        public CUIWindowBase RevealUI(CUIWindowBase view)
        {
            try
            {
                view.OnReveal();
            }
            catch (Exception e)
            {
                Debug.LogError(view.UIName + " OnShow Exception: " + e.ToString());
            }

            return(view);
        }
Exemple #7
0
        public CUIWindowBase HideUI(CUIWindowBase window)
        {
            try
            {
                window.OnHide();
            }
            catch (Exception e)
            {
                Debug.LogError(window.UIName + " OnShow Exception: " + e.ToString());
            }

            return(window);
        }
Exemple #8
0
        //退出动画播放完毕回调
        public void EndExitAnim(CUIWindowBase l_UIbase, UICallBack callBack)
        {
            l_UIbase.OnCompleteExitAnim();

            try
            {
                callBack?.Invoke(l_UIbase);
            }
            catch (Exception e)
            {
                Debug.LogError(e.ToString());
            }
        }
Exemple #9
0
        public static bool IsExitsInCache(CUIWindowBase window, Dictionary <string, List <CUIWindowBase> > dict)
        {
            if (window == null)
            {
                return(false);
            }

            if (!dict.ContainsKey(window.name))
            {
                return(false);
            }
            return(dict[window.name].Contains(window));
        }
Exemple #10
0
        private void InternalCloseUI(CUIWindowBase window, params object[] objs)
        {
            try
            {
                window.OnClose();
            }
            catch (Exception e)
            {
                Debug.LogError(window.UIName + " OnClose Exception: " + e.ToString());
            }

            StackManager.OnUIClose(window);
            CUIManagerHelper.AddUIToCache(window, HiddenDict);
        }
Exemple #11
0
        public static void AddUIToCache(CUIWindowBase window, Dictionary <string, List <CUIWindowBase> > dict)
        {
            if (window == null)
            {
                return;
            }

            if (!dict.ContainsKey(window.name))
            {
                dict.Add(window.name, new List <CUIWindowBase>());
            }

            dict[window.name].Add(window);
        }
Exemple #12
0
        /// <summary>
        /// 根据类型关闭一个ui
        /// </summary>
        public void CloseUI <T>(bool isPlayAnim = true, UICallBack callback = null, params object[] objs)
            where T : CUIWindowBase
        {
            string        winName = typeof(T).Name;
            CUIWindowBase window  = CUIManagerHelper.GetUIFromCache(winName, ActiveDict);

            if (window == null)
            {
                Debug.LogError("CloseUIWindow Error UI ->" + winName + "<-  not Exist!");
                return;
            }

            CloseUI(window, isPlayAnim, callback, objs);
        }
Exemple #13
0
        public void OpenUI <T>(UICallBack callback = null, params object[] objs) where T : CUIWindowBase
        {
            string        winName = typeof(T).Name;
            CUIWindowBase window  = CUIManagerHelper.GetUIFromCache(winName, HiddenDict);

            if (window == null)
            {
                CreateUI <T>(go =>
                {
                    window = go.GetComponent <T>();
                    InternalOpenUI(window, callback, objs);
                });
                return;
            }

            InternalOpenUI(window, callback, objs);
        }
Exemple #14
0
        /// <summary>
        /// 获取一个隐藏的UI,如果有多个同名UI,则返回最后创建的那一个
        /// </summary>
        /// <param name="winName">UI名</param>
        /// <returns></returns>
        public static CUIWindowBase GetUIFromCache(string winName, Dictionary <string, List <CUIWindowBase> > dict)
        {
            if (!dict.ContainsKey(winName))
            {
                return(null);
            }
            int count = dict[winName].Count;

            if (count == 0)
            {
                return(null);
            }

            CUIWindowBase ui = dict[winName][count - 1];

            //默认返回最后创建的那一个
            return(ui);
        }
Exemple #15
0
        private void InternalCreateUI <T>(GameObject go) where T : CUIWindowBase
        {
            string        winName = typeof(T).Name;
            CUIWindowBase window  = go.GetComponent <CUIWindowBase>();

            try
            {
                int id = CUIManagerHelper.GetUIIDFromCache(winName, ActiveDict);
                window.Init(id);
                window.OnCreated();
            }
            catch (Exception e)
            {
                Debug.LogError("OnInit Exception: " + e.ToString());
            }

            window.OnHide();
            CUIManagerHelper.AddUIToCache(window, HiddenDict);
            LayerManager.SetLayer(window);             //设置层级
        }
Exemple #16
0
        private void InternalOpenUI(CUIWindowBase window, UICallBack callback, params object[] objs)
        {
            if (window == null)
            {
                throw new Exception("UIManager: InternalOpenUI window is null");
            }

            CUIManagerHelper.RemoveUIFromCache(window, HiddenDict);
            CUIManagerHelper.AddUIToCache(window, ActiveDict);

            StackManager.OnUIOpen(window);
            try
            {
                window.OnOpen(objs);
            }
            catch (Exception e)
            {
                Debug.LogError(window.UIName + " OnOpen Exception: " + e);
            }

            AnimManager.StartEnterAnim(window, callback);             //播放动画
        }
Exemple #17
0
        /// <summary>
        /// 关闭传入的ui实例
        /// </summary>
        public void CloseUI(CUIWindowBase window, bool isPlayAnim = true, UICallBack callback = null,
                            params object[] objs)
        {
            CUIManagerHelper.RemoveUIFromCache(window, ActiveDict);

            if (callback != null)
            {
                callback += InternalCloseUI;
            }
            else
            {
                callback = InternalCloseUI;
            }

            //不播放动画直接调用回调
            if (!isPlayAnim)
            {
                callback(window, objs);
                return;
            }

            AnimManager.StartExitAnim(window, callback);
        }
Exemple #18
0
        public void SetLayer(CUIWindowBase window)
        {
            RectTransform rt = window.GetComponent <RectTransform>();

            switch (window.UIType)
            {
            case UIType.HUD:
                window.transform.SetParent(m_hudLayer);
                break;

            case UIType.Normal:
                window.transform.SetParent(m_normalLayer);
                break;

            case UIType.Dialog:
                window.transform.SetParent(m_dialogLayer);
                break;

            case UIType.Tips:
                window.transform.SetParent(m_tipsLayer);
                break;

            case UIType.Mask:
                window.transform.SetParent(m_maskLayer);
                break;
            }

            rt.localScale = Vector3.one;
            rt.sizeDelta  = Vector2.zero;

            rt.anchorMin = Vector2.zero;
            rt.anchorMax = Vector3.one;

            rt.anchoredPosition = Vector3.zero;
            rt.SetAsLastSibling();
        }
Exemple #19
0
 //开始调用进入动画
 public void StartEnterAnim(CUIWindowBase l_UIbase, UICallBack callBack)
 {
     StartCoroutine(l_UIbase.EnterAnim(EndEnterAnim, callBack));
 }
Exemple #20
0
        public CUIWindowBase HideUI(string winName)
        {
            CUIWindowBase ui = CUIManagerHelper.GetUIFromCache(winName, ActiveDict);

            return(HideUI(ui));
        }
Exemple #21
0
        public CUIWindowBase ShowUI(string viewName)
        {
            CUIWindowBase ui = CUIManagerHelper.GetUIFromCache(viewName, ActiveDict);

            return(RevealUI(ui));
        }