コード例 #1
0
ファイル: UIManage.cs プロジェクト: bp-tags/NIKit
    /// <summary>
    /// 自动给Forms层级排序
    /// </summary>
    private int AutoCalculateDepth(UIBaseForms <MonoBehaviour> forms, int curDepth)
    {
        UIPanel parentPanel = forms.GetComponent <UIPanel>();

        if (parentPanel == null)
        {
            NIDebug.LogWarning("=============自动给Forms层级排序========parentPanel是null======");
            return(curDepth);
        }

        UIPanel[] childrenPanel = forms.GetComponentsInChildren <UIPanel>(true); //这里的下标0也是parentPanel

        int parentPanelDepth = parentPanel.depth;
        int maxDis           = 0;

        for (int i = 0; i < childrenPanel.Length; i++)
        {
            int disDepth = childrenPanel[i].depth - parentPanelDepth;
            childrenPanel[i].depth = curDepth + disDepth;
            if (disDepth > maxDis)
            {
                maxDis = disDepth;
            }
        }

        return(curDepth + maxDis + 1);
    }
コード例 #2
0
ファイル: UIManage.cs プロジェクト: bp-tags/NIKit
    private void DestroyForms(string formsName)
    {
        if (string.IsNullOrEmpty(formsName))
        {
            return;
        }

        UIBaseForms <MonoBehaviour> forms = null;

        if (mFormsDic.TryGetValue(formsName, out forms))
        {
            forms.End();
            GameObject.Destroy(forms.gameObject);
            mFormsDic.Remove(formsName);
        }
    }
コード例 #3
0
ファイル: UIManage.cs プロジェクト: bp-tags/NIKit
    /// <summary>
    /// 创建窗口
    /// </summary>
    public T ShowForms <T>(string formsName, string PrefabName, bool IsAutoDepth = true) where T : UIBaseForms <MonoBehaviour>
    {
        if (string.IsNullOrEmpty(formsName) || string.IsNullOrEmpty(PrefabName))
        {
            return(null);
        }

        UIBaseForms <MonoBehaviour> forms = null;

        if (!mFormsDic.TryGetValue(formsName, out forms))
        {
            forms = _CreateForms <T>(formsName, PrefabName);
            if (forms != null)
            {
                forms.Show();
            }
        }
        else
        {
            forms.ReShow();
        }

        if (forms != null)
        {
            switch (forms.formsLayerType)
            {
            case UIFormsLayer.MainUILayer:
                if (IsAutoDepth)
                {
                    AutoCalculateDepth(forms, mCurMainUILayerDepth);
                }
                break;

            case UIFormsLayer.CommonUILayer:
            {
                if (forms.formsType == UIFormsType.Normal)
                {
                    //1.隐藏栈顶forms
                    if (mFormsStackIndex.ContainsKey(mCurStackFormsIndex))
                    {
                        string name = mFormsStackIndex[mCurStackFormsIndex];
                        if (mFormsDic.ContainsKey(name))
                        {
                            mFormsDic[name].Hide();
                        }
                    }

                    //2.如果存在栈中且不是位于栈顶(是否考虑栈顶的话就不做后面的操作),需要"Top"到栈顶
                    if (mFormsStackName.ContainsKey(formsName))
                    {
                        if (mFormsStackName[formsName] != mCurStackFormsIndex)
                        {
                            int tIndex = mFormsStackName[formsName];
                            for (int i = tIndex; i < mCurStackFormsIndex; i++)
                            {
                                mFormsStackIndex[i] = mFormsStackIndex[i + 1];
                                mFormsStackName[mFormsStackIndex[i]] = i;
                            }
                            mFormsStackIndex[mCurStackFormsIndex] = formsName;
                            mFormsStackName[formsName]            = mCurStackFormsIndex;
                        }
                    }
                    else
                    {
                        mCurStackFormsIndex++;
                        PushForms(formsName);
                    }

                    //3.移除Stack类型的窗口
                    if (mPopupFormsStack.Count > 0)
                    {
                        foreach (var item in mPopupFormsStack)
                        {
                            this.DestroyForms(item);
                        }
                        mPopupFormsStack.Clear();
                    }

                    //3.重置depth,
                    //这里可以考虑做成:假栈为空的时候,界面只剩下主界面的时候重置depth
                    //目前是做成:只显示一个normal型窗口,底下normal窗口隐藏,所以这里可以重置depth
                    //mCurFormsDepth = 1;
                }
                else if (forms.formsType == UIFormsType.Popup)
                {
                    if (!mPopupFormsStack.Contains(formsName))
                    {
                        mPopupFormsStack.Push(formsName);
                    }
                    else
                    {
                        NIDebug.LogWarning("*****************栈窗口已经有此窗口*******************");
                    }
                }

                if (IsAutoDepth)
                {
                    mCurCommonUILayerDepth = AutoCalculateDepth(forms, mCurCommonUILayerDepth);
                }
            }
            break;

            case UIFormsLayer.RewardLayer:
                break;

            case UIFormsLayer.TipLayer:
                break;

            case UIFormsLayer.NotifyLayer:
                break;

            case UIFormsLayer.GuideLayer:
                break;

            case UIFormsLayer.LoadingLayer:
                break;

            case UIFormsLayer.ServerLayer:
                break;

            default:
                break;
            }

            return(forms as T);
        }

        return(null);
    }
コード例 #4
0
ファイル: UIManage.cs プロジェクト: bp-tags/NIKit
    /// <summary>
    /// 关闭单个窗口
    /// </summary>
    public void CloseForms(string formsName)
    {
        if (string.IsNullOrEmpty(formsName))
        {
            return;
        }

        UIBaseForms <MonoBehaviour> forms = null;

        if (mFormsDic.TryGetValue(formsName, out forms))
        {
            switch (forms.formsLayerType)
            {
            case UIFormsLayer.MainUILayer:
                NIDebug.LogWarning("============MianUILayer类型的窗口不让关闭===============");
                return;

            case UIFormsLayer.CommonUILayer:
            {
                if (forms.formsType == UIFormsType.Normal)
                {
                    if (forms.formsLifeType == UIFormsLifeType.GoldLife)
                    {
                        forms.Hide();
                    }
                    else if (forms.formsLifeType == UIFormsLifeType.HumanLife)
                    {
                        DestroyForms(formsName);
                    }

                    PopForms(formsName);
                }
                else if (forms.formsType == UIFormsType.Popup)
                {
                    DestroyForms(formsName);
                }
            }
            break;

            case UIFormsLayer.RewardLayer:
                break;

            case UIFormsLayer.TipLayer:
                break;

            case UIFormsLayer.NotifyLayer:
                break;

            case UIFormsLayer.GuideLayer:
                break;

            case UIFormsLayer.LoadingLayer:
                break;

            case UIFormsLayer.ServerLayer:
                break;

            default:
                break;
            }
        }
    }