Example #1
0
    /// <summary>
    /// 隐藏GrayScreen,
    /// </summary>
    /// <param name="wnd"></param>
    public static void HideGrayScreen(UI3Wnd wnd)
    {
        if (wnd == null || wnd.gameObject == null || wnd.WndType != UI3WndType.PopUp || wnd.GetClassName() == "UIGrayScreen")
        {
            return;
        }
        UIGrayScreen grayWnd = findWindow <UIGrayScreen>();

        if (grayWnd == null)
        {
            return;
        }
        string           panelLayer = GetPanelLayer(wnd.GetClassName());
        UIStack <string> stack      = GetStackByPanelLayer(panelLayer);

        if (stack == null)
        {
            return;
        }
        UI3Wnd lastWnd = GetLastGrayScreen(stack);

        if (lastWnd == null)
        {
            grayWnd.setActive(false);
        }
        else
        {
            ShowGrayScreen(lastWnd);
        }
    }
Example #2
0
    /// <summary>
    /// 根据不同layer,进行入栈,当栈中已经有这个界面,不入栈,isPushBack属性,用于控制是否需要栈管理,例如,GrayScreen不需要栈管理,
    /// </summary>
    /// <param name="name"></param>
    public static void PushBack(string name)
    {
        if (string.IsNullOrEmpty(name) == true)
        {
            return;
        }
        string           panelLayer = GetPanelLayer(name);
        UIStack <string> stack      = GetStackByPanelLayer(panelLayer);

        if (stack == null)
        {
            return;
        }
        if (stack.Have(name))
        {
            return;
        }
        else if (stack.Have(GetValid(name, true)))
        {
            UIStackBringTop(name);
            return;
        }
        UIResInfoAsset resInfo = GetUIResInfoAsset(name);

        stack.DisplayList();
        OnPushBack(resInfo, stack);
        stack.DisplayList();
    }
Example #3
0
    public void PopUI(string kPrefabName, UIType utype = UIType.FullScreen)
    {
        if (!this.ReorganizePush(kPrefabName))
        {
            this.AddToStack(new UIStack
            {
                Node       = UINodesManager.NormalUIRoot,
                prefabName = kPrefabName,
                type       = utype
            });
        }
        UIStack uIStack = this.m_listUIStacks.Find((UIStack e) => e.prefabName == kPrefabName);

        if (uIStack != null)
        {
            if (uIStack.type == UIType.Pop)
            {
                this.PopUILast_FullScreen();
            }
            else if (!UIManagerControl.Instance.IsOpen(uIStack.prefabName))
            {
                UIManagerControl.Instance.OpenUI(uIStack.prefabName, uIStack.Node, false, uIStack.type);
            }
        }
    }
Example #4
0
    /// <summary>
    /// 出栈需要返回界面(栈顶),显示界面,
    /// </summary>
    /// <param name="wnd"></param>
    public static void BackPopup(string name)
    {
        UI3WndType type = GetWndType(name);

        if (UI3WndType.ReturnFullScreen != type)
        {
            return;
        }
        UIStack <string> stack    = GetStackByWndName(name);
        string           lastName = Peek(stack);

        lastName = GetValid(lastName, false);
        stack.DisplayList();
        if (string.IsNullOrEmpty(lastName) == true)
        {
            return;
        }
        UI3Wnd wnd = createWindow(lastName);

        if (wnd == null)
        {
            return;
        }
        int index = stack.FindLastByName(GetValid(lastName, true));

        stack.PopAt(index);
        wnd.show();
        stack.DisplayList();
    }
Example #5
0
 public void SetOwningStack(UIStack stack)
 {
     if (owningStack != null)
     {
         throw new System.InvalidOperationException("This element has already been asigned to a stack");
     }
     this.owningStack = stack;
 }
Example #6
0
        /// <summary>
        /// 对加载好的预制做处理
        /// </summary>
        /// <param name="asetName"></param>
        /// <param name="go"></param>
        void OnAssetProcess(string asetName, GameObject go)
        {
            mLoading = false;

            mMenuObject = go;
            mMenuObject.transform.SetParent(parentTransform == null ? mDMono.transform.parent : parentTransform);
            mMenuObject.transform.position   = Vector3.zero;
            mMenuObject.transform.localScale = Vector3.one;
            mMenuObject.transform.rotation   = Quaternion.identity;

            mMenu = mMenuObject.GetComponent <UIController>();
            if (mMenu != null)
            {
                mMenu.MCurrentViewName = asetName;
                mMenu.destroyHandler   = new System.Action <UIController>(DestroyMenuHandler);
            }

            if (mShow)
            {
                if (mMenu != null)
                {
                    mMenu.SetMenuData(mParam);
                    mMenu.PlayTween();
                    if (mQueue)
                    {
                        mMenu.Queue();
                    }
                    else
                    {
                        mMenu.Open();
                    }
                }
                else
                {
                    mMenuObject.CustomSetActive(true);
                    mMenuObject.BroadcastMessage("SetMenuData", mParam, SendMessageOptions.DontRequireReceiver);
                }
            }
            else
            {
                if (mMenu != null)
                {
                    UIStack.Close(mMenu);
                }
                else
                {
                    mMenuObject.CustomSetActive(false);
                }
            }

            if (mOnReady != null)
            {
                mOnReady(mMenuObject);
                mOnReady = null;
            }

            GlobalMenuManager.Instance.OpenUIEnd(menuPrefabName);
        }
Example #7
0
    public void PopUIIfTarget(string prefab)
    {
        UIStack theLastUIStack = this.GetTheLastUIStack();

        if (theLastUIStack != null && theLastUIStack.prefabName.Equals(prefab))
        {
            this.PopUIRemovePop();
        }
    }
Example #8
0
    public static void SetTop(string name)
    {
        string           panelLayer = GetPanelLayer(name);
        UIStack <string> stack      = GetStackByPanelLayer(panelLayer);

        if (stack == null)
        {
            return;
        }
        stack.SetTop(name);
    }
Example #9
0
    public static void ClearStack(string name)
    {
        string           panelLayer = GetPanelLayer(name);
        UIStack <string> stack      = GetStackByPanelLayer(panelLayer);

        if (stack == null)
        {
            return;
        }
        stack.Clear();
    }
Example #10
0
 public virtual void Pop(bool destroy)
 {
     if (owningStack.Pop(this))
     {
         owningStack = null;
     }
     if (destroy)
     {
         Destroy(gameObject);
     }
 }
Example #11
0
    public static void ClearStack(UI3WndPanelLayerType type)
    {
        string           panelLayer = type.ToString();
        UIStack <string> stack      = GetStackByPanelLayer(panelLayer);

        if (stack == null)
        {
            return;
        }
        stack.Clear();
    }
Example #12
0
    /// <summary>
    /// 获取上一个bringTop界面
    /// </summary>
    /// <param name="stack"></param>
    /// <returns></returns>
    public static string Peek(UIStack <string> stack)
    {
        //string lastStr = "";
        //List<string> list = stack.List;
        //if(list != null || list.Count > 0)
        //{
        //    for(int i = list.Count - 1; i >= 0;i--)
        //    {
        //        UI3Wnd curWnd = findWindow(list[i]);
        //        if(curWnd != null && curWnd.isBringTop == true)
        //            return lastStr = curWnd.GetClassName();
        //    }

        //}
        return(stack.Peek());
    }
Example #13
0
    /// <summary>
    /// 出栈指定元素,不会返回之前的元素,
    /// </summary>
    public static bool CanPopBack(string name, int index, UIStack <string> stack)
    {
        if (index < 0 || stack == null)
        {
            return(false);
        }

        string nextName = stack.Peek(index + 1);

        if (string.IsNullOrEmpty(nextName) == true)
        {
            return(true);
        }
        UI3WndType wndType = GetWndType(nextName);

        return(wndType != UI3WndType.ReturnFullScreen);
    }
Example #14
0
    /// <summary>
    /// 获取上一个Popup类型的界面,
    /// </summary>
    /// <param name="stack"></param>
    /// <returns></returns>
    public static UI3Wnd GetLastGrayScreen(UIStack <string> stack)
    {
        UI3Wnd        lastWnd = null;
        List <string> list    = stack.List;

        if (list != null || list.Count > 0)
        {
            for (int i = list.Count - 1; i >= 0; i--)
            {
                UI3Wnd curWnd = findWindow(list[i]);
                if (curWnd != null && curWnd.WndType == UI3WndType.PopUp && curWnd.gameObject.activeInHierarchy == true)
                {
                    return(lastWnd = curWnd);
                }
            }
        }
        return(lastWnd);
    }
Example #15
0
    /// <summary>
    /// 入栈完成之后操作,
    /// 需要注意,这些步骤不能修改,修改的话,会有问题,
    /// 步骤1,打开ReturnFullScreen界面时候,需要先复制栈顶界面在入栈本界面,
    /// 步骤2,打开全屏界面时候需要隐藏之前接口,同时隐藏PopUp layer之前所有界面,
    /// 步骤3,打开DonotReturnFullScreen界面时候,清空栈,
    /// 步骤4,入栈该界面,这个时候只有一个界面,
    /// </summary>
    /// <param name="wnd"></param>
    public static void OnPushBack(UIResInfoAsset resInfoAsset, UIStack <string> stack = null)
    {
        stack = stack == null?GetStackByPanelLayer(resInfoAsset.layerType.ToString()) : stack;

        if (stack == null)
        {
            return;
        }
        stack.DisplayList();
        UI3WndType wndType = (UI3WndType)resInfoAsset.wndType;

        //步骤1,打开ReturnFullScreen界面时候,需要先复制栈顶界面在入栈本界面,
        if (wndType == UI3WndType.ReturnFullScreen)
        {
            string lastT = stack.Peek();
            lastT = GetValid(lastT, true);
            if (stack.Have(lastT) == false)
            {
                stack.PushBack(lastT);
            }
        }

        //步骤2,打开全屏界面时候需要隐藏之前接口,同时隐藏PopUp layer之前所有界面,
        if (wndType == UI3WndType.ReturnFullScreen || wndType == UI3WndType.DonotReturnFullScreen)
        {
            HideStackWindows(resInfoAsset.layerType, resInfoAsset.name);
        }

        //步骤3,打开DonotReturnFullScreen界面时候,清空栈,
        if (wndType == UI3WndType.DonotReturnFullScreen)
        {
            //当前layer栈clear,
            stack.Clear();
        }

        //步骤4,入栈该界面,这个时候只有一个界面,
        if (GetIsPushStack(resInfoAsset.name) == true)
        {
            stack.PushBack(resInfoAsset.name);
        }
    }
Example #16
0
    /// <summary>
    /// shortcut for UIStack.Open
    /// </summary>
    public void Open()
    {
        if (this.gameObject != null)
        {
            EB.Debug.LogUI("执行【<color=#00ff00>{0}</color>】预设UIController中<color=#42fe79>Open</color>方法", this.gameObject.name);
        }

        if (UIStack.Instance != null && UIStack.Instance.gameObject.activeSelf)
        {
            UIStack.Open(this);
            //ToDo:暂时屏蔽
            //if (GlobalMenuManager.Instance != null && gameObject != null)
            //{
            //    GlobalMenuManager.Instance.SetUIEnabled(MCurrentViewName, true);
            //}
            if (gameObject != null)
            {
                GlobalUtils.CallStaticHotfix("Hotfix_LT.UI.GlobalMenuManager", "SetUIEnabledFromILR", MCurrentViewName, true);
            }
        }
    }
Example #17
0
    public static void HideStackWindows(string layerType, string name = null)
    {
        UIStack <string> stack = GetStackByPanelLayer(layerType);

        if (stack == null)
        {
            return;
        }
        for (int i = 0; i < stack.List.Count; i++)
        {
            string strVal = stack.List[i];
            if (string.IsNullOrEmpty(name) == false && name.Equals(strVal))
            {
                continue;
            }
            UI3Wnd curWnd = findWindow(strVal);
            if (curWnd != null && curWnd.isHideOnFullScreen == true)
            {
                curWnd.hide();
            }
        }
    }
Example #18
0
    protected void OnLoadAndPlace(GameObject placed)
    {
        if (placed == null)
        {
            return;
        }

        IStackableUI stackable = (IStackableUI)placed.GetComponent(typeof(IStackableUI));

        if (stackable != null && stackable.EnstackOnCreate)
        {
            if (UIStack.Instance.IsLoadingScreenUp || UIStack.Instance.IsWaittingScreenUp)
            {
                UIStack.Queue(stackable);
            }
            else
            {
                UIStack.Open(stackable);
            }
        }
        SetHudShow();
    }
Example #19
0
    /// <summary>
    /// shortcut for UIStack.Close
    /// </summary>
    public void Close()
    {
        if (this.gameObject != null)
        {
            EB.Debug.LogUI("执行【<color=#00ff00>{0}</color>】预设UIController中<color=#ff0000>Close</color>方法", this.gameObject.name);
        }

        if (UIStack.Instance != null && UIStack.Instance.gameObject.activeSelf)
        {
            UIStack.Close(this);
            //ToDo:暂时屏蔽
            //if (GlobalMenuManager.Instance != null && gameObject != null)
            //{
            //    GlobalMenuManager.Instance.SetUIEnabled(MCurrentViewName, false);
            //}
            if (gameObject != null)
            {
                GlobalUtils.CallStaticHotfix("Hotfix_LT.UI.GlobalMenuManager", "SetUIEnabledFromILR", MCurrentViewName, false);
            }
        }
        IsFirstLoad    = false;
        HasPlayedTween = false;
    }
Example #20
0
    /// <summary>
    /// 根据不同layer,出栈,在获取上一个bringTop界面,在进行bringTop操作,
    /// 该方法只适用于ReturnFullScreen界面,
    /// </summary>
    /// <param name="name"></param>
    public static void PopBack(string name)
    {
        if (IsVaild(name, false) == false)
        {
            return;
        }
        string           panelLayer = GetPanelLayer(name);
        UIStack <string> stack      = GetStackByPanelLayer(panelLayer);

        if (stack == null)
        {
            return;
        }
        stack.DisplayList();

        int index = stack.FindFirstByName(name);

        if (index < 0)
        {
            return;
        }
        //if(CanPopBack(name,index,stack) == false)
        //    return;
        bool   isTop   = stack.IsTop(name);
        bool   isPopup = true;
        UI3Wnd wnd     = findWindow(name);

        if (wnd != null)
        {
            isPopup = wnd.isHideOnFullScreen;
        }
        if (isPopup == false)
        {
            return;
        }
        stack.PopAt(index);
    }
Example #21
0
 private void AddToStack(UIStack uistack)
 {
     this.m_listUIStacks.Add(uistack);
 }
Example #22
0
    /// <summary>
    /// bringTop当前栈界面,
    /// </summary>
    /// <param name="name"></param>
    public static void UIStackBringTop(string name, bool isClearStack = false)
    {
        string           panelLayer = GetPanelLayer(name);
        UIStack <string> stack      = GetStackByPanelLayer(panelLayer);

        if (stack == null)
        {
            return;
        }
        stack.DisplayList();
        string pushName = GetValid(name, true);

        if (stack.Have(name) == false && stack.Have(pushName) == false)
        {
            return;
        }
        if (stack.IsTop(name) == true)
        {
            return;
        }

        /****
        *
        *  UI3WndType wndType = UI3WndType.None;
        *  UI3WndType nextWndType = UI3WndType.None;
        *  //UI3WndType lastWndType = UI3WndType.None;
        *  int nextIndex = -1;
        *  wndType = GetWndType(name);
        *  int index = stack.FindFirstByName(name);
        *  if (index < 0)
        *   return;
        *  string nextName = stack.FindDifferenct(index,name,out nextIndex);
        *  if(string.IsNullOrEmpty(nextName) == false)
        *  {
        *   nextWndType = GetWndType(nextName);
        *   int lastIndex = -1;
        *   string lastName = stack.FindDifferenct(index,name,out lastIndex,false);
        *   if (nextWndType == UI3WndType.ReturnFullScreen)
        *   {
        *       if (lastIndex < 0)
        *       {
        *           stack.PopAt(nextIndex - 1);
        *       }
        *       else
        *       {
        *           stack.SetAt(nextIndex - 1,lastName);
        *       }
        *   }
        *  }
        *  stack.PopAt(index);
        *  if (wndType == UI3WndType.ReturnFullScreen)
        *  {
        *   stack.PopAt(index - 1);
        *  }
        **
        ****/
        //当前界面存在,当前复制界面存在,
        if (stack.Have(name) && stack.Have(pushName))
        {
            int    index    = stack.FindFirstByName(name);
            string lastName = stack.Peek(index - 1);
            //上一个界面不为空,上一个界面没有被复制,需要被复制,
            if (string.IsNullOrEmpty(lastName) == false && IsVaild(lastName, true) == false)
            {
                stack.SetAt(index, GetValid(lastName, true));
            }
        }
        //只是当前界面存在,同时,上一个元素是当前界面的复制界面,所以需要清除复制界面,
        else if (stack.Have(name))
        {
            int    index    = stack.FindFirstByName(name);
            string lastName = stack.Peek(index - 1);
            if (string.IsNullOrEmpty(lastName) == false && IsVaild(lastName, true) == true)
            {
                stack.PopAt(lastName);
            }
        }
        //只是当前界面复制界面存在,需要判断上一个界面是否被复制,没有复制就复制上一个界面,
        else
        {
            int    index    = stack.FindFirstByName(pushName);
            string lastName = stack.Peek(index - 1);
            if (string.IsNullOrEmpty(lastName) == false && IsVaild(lastName, true) == false)
            {
                stack.SetAt(index, GetValid(lastName, true));
            }
        }
        //出栈当前界面原界面和复制界面,
        stack.PopAt(name);
        stack.PopAt(pushName);
        PushBack(name);
        stack.DisplayList();
    }
Example #23
0
 private void RemoveFromStack(UIStack uistack)
 {
     this.m_listUIStacks.Remove(uistack);
 }