Пример #1
0
        public BaseUIPanel ShowUIForm(string uiFormName)
        {
            BaseUIPanel baseUiPanels = LoadFormsToAllUIFormsCache(uiFormName); //根据UI窗体的名称,加载到“所有UI窗体”缓存集合中
            if (baseUiPanels == null) return null;
            if (baseUiPanels.UIType.IsClearStack) ClearStackArray(); //是否清空“栈集合”中得数据

            //根据不同的UI窗体的显示模式,分别作不同的加载处理
            switch (baseUiPanels.UIType.UIForms_ShowMode)
            {
                case UIFormShowModes.Normal: //“普通显示”窗口模式
                    //把当前窗体加载到“当前窗体”集合中。
                    LoadUIToCurrentCache(uiFormName);
                    break;
                case UIFormShowModes.Return: //“反向切换”窗口模式
                    PushUIFormToStack(uiFormName);
                    break;
                case UIFormShowModes.ReturnHideOther: //“反向切换且隐藏其他窗口”窗口模式
                    EnterUIFormsAndHideOtherAndReturn(uiFormName);
                    break;
                case UIFormShowModes.HideOther: //“隐藏其他”窗口模式
                    EnterUIFormsAndHideOther(uiFormName);
                    break;
            }

            //LogError("showUI  " + uiFormName);
            return baseUiPanels;
        }
Пример #2
0
        void Update()
        {
            if (UIType.IsESCClose)
            {
                if (UIManager.Instance.CloseUIFormKeyDownHandler != null && UIManager.Instance.CloseUIFormKeyDownHandler.Invoke())
                {
                    BaseUIPanel peek = UIManager.Instance.GetPeekUIForm();
                    if (peek == null || peek == this)
                    {
                        closeFlag = true;
                        return;
                    }
                }
            }

            if (UIType.IsClickElsewhereClose)
            {
                bool mouseLeftDown    = UIManager.Instance.MouseLeftButtonDownHandler != null && UIManager.Instance.MouseLeftButtonDownHandler.Invoke();
                bool mouseRightDown   = UIManager.Instance.MouseRightButtonDownHandler != null && UIManager.Instance.MouseRightButtonDownHandler.Invoke();
                bool isClickElseWhere = (mouseLeftDown && !EventSystem.current.IsPointerOverGameObject()) || mouseRightDown;
                if (isClickElseWhere)
                {
                    BaseUIPanel peek = UIManager.Instance.GetPeekUIForm();
                    if (peek == null || peek == this)
                    {
                        closeFlag = true;
                        return;
                    }
                }
            }

            ChildUpdate();
        }
Пример #3
0
        /// <summary>
        /// 加载指定名称的“UI窗体”
        /// 功能:
        ///    1:根据“UI窗体名称”,加载预设克隆体。
        ///    2:根据不同预设克隆体中带的脚本中不同的“位置信息”,加载到“根窗体”下不同的节点。
        ///    3:隐藏刚创建的UI克隆体。
        ///    4:把克隆体,加入到“所有UI窗体”(缓存)集合中。
        /// 
        /// </summary>
        /// <param name="uiFormName">UI窗体名称</param>
        private BaseUIPanel LoadUIForm(string uiFormName)
        {
            GameObject UIPanel = LoadUIPanelHandler(uiFormName);
            BaseUIPanel baseUiPanel = UIPanel.GetComponent<BaseUIPanel>();
            if (baseUiPanel == null)
            {
                LogError("BaseUIPanel==null! ,请先确认窗体预设对象上是否加载了BaseUIForm的子类脚本! 参数 uiFormName=" + uiFormName);
                return null;
            }

            switch (baseUiPanel.UIType.UIForms_Type)
            {
                case UIFormTypes.Normal: //普通窗体节点
                    UIPanel.transform.SetParent(UINormalRoot, false);
                    break;
                case UIFormTypes.Fixed: //固定窗体节点
                    UIPanel.transform.SetParent(UIFixedRoot, false);
                    break;
                case UIFormTypes.PopUp: //弹出窗体节点
                    UIPanel.transform.SetParent(UIPopUpRoot, false);
                    break;
            }

            UIPanel.SetActive(false);
            AllUIFormDict.Add(uiFormName, baseUiPanel);
            return baseUiPanel;
        }
Пример #4
0
 //(“反向切换”属性)窗体的出栈逻辑
 private void PopUIForms()
 {
     if (CurrentUIFormsStack.Count >= 2)
     {
         BaseUIPanel topUiPanels = CurrentUIFormsStack.Pop();
         topUiPanels.Hide();
         BaseUIPanel nextUiPanels = CurrentUIFormsStack.Peek();
         nextUiPanels.Display();
     }
     else if (CurrentUIFormsStack.Count == 1)
     {
         BaseUIPanel topUiPanels = CurrentUIFormsStack.Pop();
         topUiPanels.Hide();
     }
 }
Пример #5
0
        /// <summary>
        /// UI窗体入栈
        /// </summary>
        /// <param name="uiFormName">窗体的名称</param>
        private void PushUIFormToStack(string uiFormName)
        {
            if (CurrentUIFormsStack.Count > 0)
            {
                BaseUIPanel topUiPanel = CurrentUIFormsStack.Peek();
                topUiPanel.Freeze();
            }

            AllUIFormDict.TryGetValue(uiFormName, out BaseUIPanel baseUIForm);
            if (baseUIForm != null)
            {
                baseUIForm.Display();
                CurrentUIFormsStack.Push(baseUIForm);
            }
            else
            {
                LogError("baseUIForm==null,Please Check, 参数 uiFormName=" + uiFormName);
            }
        }
Пример #6
0
 /// <summary>
 /// 显示(打开)UI窗体
 /// 功能:
 /// 1: 根据UI窗体的名称,加载到“所有UI窗体”缓存集合中
 /// 2: 根据不同的UI窗体的“显示模式”,分别作不同的加载处理
 /// </summary>
 public T ShowUIForms<T>() where T : BaseUIPanel
 {
     string uiFormNameStr = typeof(T).Name;
     BaseUIPanel uiPanel = ShowUIForm(uiFormNameStr);
     return (T) uiPanel;
 }
Пример #7
0
 public bool IsPeekUIForm<T>() where T : BaseUIPanel
 {
     BaseUIPanel peek = GetPeekUIForm();
     return peek != null && peek is T;
 }