Exemplo n.º 1
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();
    }
Exemplo n.º 2
0
    public static void destroyAllWindowsOnLoadScene(bool destroyAll = false)
    {
        foreach (KeyValuePair <string, UIResInfo> pair in m_resInfoDict)
        {
            UIResInfo resInfo = pair.Value;
            if (destroyAll == false)
            {
                UIResInfoAsset resInfoAsset = UIResInfoAssetAssetBundleReader.Instance.FindById(resInfo.name);
                if (resInfoAsset != null && resInfoAsset.wndType == (int)UI3WndType.Global)
                {
                    continue;
                }
            }
            if (resInfo.objList.Count > 0)
            {
                UI3Wnd wnd = resInfo.objList[0].GetComponent <UI3Wnd>();
                if (wnd != null && wnd.isDestroyOnLoadLevel == true)
                {
                    for (int i = 0; i < resInfo.objList.Count; i++)
                    {
                        if (resInfo.objList[i] != null)
                        {
                            NGUITools.Destroy(resInfo.objList[i]);
                            resInfo.objList[i] = null;
                        }
                    }
                    PopBack(resInfo.name);
                    resInfo.objList.Clear();
                    resInfo.prefab = null;
                }
            }
        }

        Resources.UnloadUnusedAssets();
    }
Exemplo n.º 3
0
    /// <summary>
    /// 获取WndType,
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public static UI3WndType GetWndType(string name)
    {
        UIResInfoAsset resInfo = UIResInfoAssetAssetBundleReader.Instance.FindById(name);

        if (resInfo == null)
        {
            return(UI3WndType.None);
        }
        return((UI3WndType)resInfo.wndType);
    }
Exemplo n.º 4
0
    /// <summary>
    /// 获取panelLayer,
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public static string GetPanelLayer(string name)
    {
        UIResInfoAsset resInfo = UIResInfoAssetAssetBundleReader.Instance.FindById(name);

        if (resInfo == null)
        {
            return("");
        }
        return(resInfo.layerType.ToString());
    }
Exemplo n.º 5
0
    public static GameObject getWndRootPanel(string wndName)
    {
        GameObject root = getUIRootPanel();

        if (root == null)
        {
            return(null);
        }
        UIResInfoAsset uiResInfoAsset = UIResInfoAssetAssetBundleReader.Instance.FindById(wndName);

        if (uiResInfoAsset == null)
        {
            return(null);
        }

        UI3WndPanelLayerType layerType = (UI3WndPanelLayerType)Enum.Parse(typeof(UI3WndPanelLayerType), uiResInfoAsset.layerType);
        string    wndRootName          = uiResInfoAsset.layerType.ToString();
        Transform wndTran = root.transform.Find(wndRootName);

        if (wndTran == null)
        {
            GameObject panelGO = new GameObject(wndRootName);
            panelGO.transform.parent        = root.transform;
            panelGO.transform.localPosition = Vector3.zero;
            panelGO.transform.localRotation = Quaternion.identity;
            panelGO.transform.localScale    = Vector3.one;
            panelGO.layer = root.layer;
            wndTran       = root.transform.Find(wndRootName);
        }

        int beginDepth = 0;

        if (UI3WndPanelLayer.layers[(int)layerType] != null)
        {
            beginDepth = UI3WndPanelLayer.layers[(int)layerType].begin;
        }

        UIPanel panel = wndTran.gameObject.GetComponent <UIPanel>();

        if (panel == null)
        {
            panel       = wndTran.gameObject.AddComponent <UIPanel>();
            panel.depth = beginDepth;
        }

        return(wndTran.gameObject);
    }
Exemplo n.º 6
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);
        }
    }
Exemplo n.º 7
0
    void SetupWnds()
    {
        UIResInfoAssetAssetBundleReader     resInfoReaderInstance = UIResInfoAssetAssetBundleReader.Instance as UIResInfoAssetAssetBundleReader;
        Dictionary <string, UIResInfoAsset> resInfoes             = UIResInfoAssetAssetBundleReader.dicts;
        List <string> keys = new List <string>(resInfoes.Keys);

        for (int i = 0; i < keys.Count; i++)
        {
            UIResInfoAsset resInfo = resInfoes[keys[i]];
            if (resInfoes != null)
            {
                SetupWnd(resInfo.id, resInfo.path, resInfo.wndType, resInfo.layerType);
            }
        }

        for (int i = 0; i < UI3WndPanelLayer.layers.Length; i++)
        {
            if (m_wndStacks.ContainsKey(UI3WndPanelLayer.layers[i].stackLayerType.ToString()) == true)
            {
                continue;
            }
            m_wndStacks.Add(UI3WndPanelLayer.layers[i].type.ToString(), new UIStack <string>(UI3WndPanelLayer.layers[i].type.ToString()));
        }
    }
Exemplo n.º 8
0
    public static UIResInfoAsset GetUIResInfoAsset(string name)
    {
        UIResInfoAsset resInfo = UIResInfoAssetAssetBundleReader.Instance.FindById(name);

        return(resInfo);
    }