コード例 #1
0
ファイル: UIModule.cs プロジェクト: PenpenLi/BIG_HEAD
    public void OpenForm(int formId, object userdata = null)
    {
        if (uiCamera == null)
        {
            Debug.LogError("请先初始化UI模块!");
            return;
        }

        UIFormTableSetting config = UIFormTableSettings.Get((int)formId);

        if (config == null)
        {
            Debug.LogError("The UI[" + formId.ToString() + "] is not configed!");
            return;
        }
        //暂时关闭窗口复用
        UIFormBase form = GetForm(formId);

        if (form != null)
        {
            CloseForm(form);
        }
        //if (form == null)
        {
            ResourceManager.LoadGameObject("UI/" + config.Path, LoadFormSuccess, LoadFormFailed, config, userdata);
            return;
        }
        //ProcessForm(form, config, userdata, true);
    }
コード例 #2
0
ファイル: UIModule.cs プロジェクト: PenpenLi/BIG_HEAD
    void LoadFormSuccess(string path, object[] userData, GameObject uiForm)
    {
        UIFormTableSetting config = (userData[0] as UIFormTableSetting);

        if (uiForm == null)
        {
            Debug.LogError("The UI prefab[" + config.Path + "] is not exist!");
            return;
        }
        UIFormBase script = uiForm.GetComponent <UIFormBase>();

        if (script == null)
        {
            Debug.LogError("The UI need a script[" + typeof(UIFormBase).ToString() + "]!");
            GameObject.Destroy(uiForm);
            return;
        }
        ProcessForm(script, config, userData[1], false);
        Messenger.Broadcast <UIFormBase>(MessageId.UI_FORM_LOADED, script);
    }
コード例 #3
0
ファイル: UIModule.cs プロジェクト: PenpenLi/BIG_HEAD
    /// <summary>
    /// 获取最新的一个打开的这个ID的窗口
    /// </summary>
    UIFormBase FindForm(int formId)
    {
        UIFormTableSetting config = UIFormTableSettings.Get((int)formId);

        if (config == null)
        {
            Debug.LogError("The UI[" + formId.ToString() + "] is not configed!");
            return(null);
        }
        UIFormBase        form = null;
        List <UIFormBase> list = null;

        switch ((UIFormsShowMode)config.ShowMode)
        {
        case UIFormsShowMode.Pop:
            list = dicForms[UIFormsShowMode.Pop];
            break;

        case UIFormsShowMode.HideOther:
            list = dicForms[UIFormsShowMode.HideOther];
            break;

        case UIFormsShowMode.Single:
            list = dicForms[UIFormsShowMode.Single];
            break;

        case UIFormsShowMode.Normal:
        default:
            list = dicForms[UIFormsShowMode.Normal];
            break;
        }
        for (int i = list.Count - 1; i >= 0; i--)
        {
            if (list[i] != null && list[i].Table.Id == config.Id)
            {
                form = list[i];
                break;
            }
        }
        return(form);
    }
コード例 #4
0
ファイル: UIFormBase.cs プロジェクト: PenpenLi/BIG_HEAD
 /// <summary>
 /// 这个方法不允许调用,uimodule专用
 /// </summary>
 public void Init(UIFormTableSetting table, object userdata)
 {
     Table = table;
     state = UIFormState.Hide;
     OnInit(userdata);
     isOpen = false;
     if (table.Title != 0)
     {
         UIItemTableSetting uiItem = UIItemTableSettings.Get(2);
         ResourceManager.LoadGameObject(uiItem.Path,
                                        (p, data, go) =>
         {
             go.transform.parent               = transform;
             go.transform.localPosition        = Vector3.zero;
             go.transform.localScale           = Vector3.one;
             go.GetComponent <UIPanel>().depth = StartDepth + 1;
             UIEventListener.Get(go.transform.Find("btnClose").gameObject).onClick = (btn) => { UIModule.Instance.CloseForm(this); };
             go.transform.Find("btnClose").GetComponent <UILabel>().text           = I18N.Get(table.Title);
         },
                                        (p, data) => { });
     }
 }
コード例 #5
0
ファイル: UIModule.cs プロジェクト: PenpenLi/BIG_HEAD
    public void CloseForm(UIFormBase form)
    {
        if (form == null)
        {
            return;
        }
        UIFormTableSetting config = form.Table;
        //设置显示逻辑
        UIFormsShowMode mode = (UIFormsShowMode)config.ShowMode;

        if (!dicForms.ContainsKey(mode))
        {
            dicForms[mode] = new List <UIFormBase>();
            GameObject modeRoot = new GameObject(mode.ToString());
            modeRoot.transform.SetParent(uiCamera);
            modeRoot.transform.localPosition    = Vector3.zero;
            modeRoot.transform.localScale       = Vector3.one;
            modeRoot.transform.localEulerAngles = Vector3.zero;
            dicFormRoots.Add(mode, modeRoot);
        }
        List <UIFormBase> formList = null;
        UIFormBase        nextForm = null;
        int index = 1;

        switch (mode)
        {
        case UIFormsShowMode.Pop:
            formList = dicForms[mode];
            //关闭的窗口并不是当前显示的窗口
            if (form.State == UIFormState.Hide || form.gameObject.activeSelf == false)
            {
                break;
            }
            //寻找下个可以显示的窗口
            while (nextForm == null && formList.Count > index)
            {
                if (formList[formList.Count - 1 - index] != null && formList[formList.Count - 1 - index].State == UIFormState.Show)
                {
                    nextForm = formList[formList.Count - 1 - index];
                }
                else
                {
                    index++;
                }
            }
            if (nextForm != null)
            {
                nextForm.Resume();
            }
            break;

        case UIFormsShowMode.HideOther:
            formList = dicForms[mode];
            //关闭的窗口并不是当前显示的窗口
            if (form.State == UIFormState.Hide || form.gameObject.activeSelf == false)
            {
                break;
            }
            //寻找下个可以显示的窗口
            while (nextForm == null && formList.Count > index)
            {
                if (formList[formList.Count - 1 - index] != null && formList[formList.Count - 1 - index].State == UIFormState.Show)
                {
                    nextForm = formList[formList.Count - 1 - index];
                }
                else
                {
                    index++;
                }
            }
            if (nextForm == null)
            {
                for (int i = 0; i < dicForms[UIFormsShowMode.Normal].Count; i++)
                {
                    dicForms[UIFormsShowMode.Normal][i].Resume();
                }
            }
            if (nextForm != null)
            {
                nextForm.Resume();
            }
            break;

        case UIFormsShowMode.Single:
            formList = dicForms[mode];
            //关闭的窗口并不是当前显示的窗口
            if (form.State == UIFormState.Hide || form.gameObject.activeSelf == false)
            {
                break;
            }
            while (nextForm == null && formList.Count > index)
            {
                if (formList[formList.Count - 1 - index] != null && formList[formList.Count - 1 - index].State == UIFormState.Show)
                {
                    nextForm = formList[formList.Count - 1 - index];
                }
                else
                {
                    index++;
                }
            }
            //非独占,都显示弹窗
            if (nextForm == null)
            {
                if (dicForms[UIFormsShowMode.Pop].Count > 0)
                {
                    dicForms[UIFormsShowMode.Pop][dicForms[UIFormsShowMode.Pop].Count - 1].Resume();
                }
            }
            //寻找模式窗口
            while (nextForm == null && dicForms[UIFormsShowMode.HideOther].Count > index)
            {
                UIFormBase formBase = dicForms[UIFormsShowMode.HideOther][formList.Count - 1 - index];
                if (formBase != null && formBase.State == UIFormState.Show)
                {
                    nextForm = formBase;
                }
                else
                {
                    index++;
                }
            }
            //没有模式窗口,显示普通窗口
            if (nextForm == null)
            {
                for (int i = 0; i < dicForms[UIFormsShowMode.Normal].Count; i++)
                {
                    dicForms[UIFormsShowMode.Normal][i].Resume();
                }
            }
            if (nextForm != null)
            {
                nextForm.Resume();
            }
            break;

        case UIFormsShowMode.Normal:
        default:
            formList = dicForms[UIFormsShowMode.Normal];
            //关闭的窗口并不是当前显示的窗口
            if (form.State == UIFormState.Hide || form.gameObject.activeSelf == false)
            {
                break;
            }
            while (nextForm == null && formList.Count > index)
            {
                if (formList[formList.Count - 1 - index] != null && formList[formList.Count - 1 - index].State == UIFormState.Show)
                {
                    nextForm = formList[formList.Count - 1 - index];
                }
                else
                {
                    index++;
                }
            }
            if (nextForm != null)
            {
                nextForm.Resume();
            }
            break;
        }

        //寻找剩下的有没有相同的,有就不销毁
        int count = 0;

        index = 0;
        for (int i = 0; i < formList.Count; i++)
        {
            if (formList[i] == form)
            {
                count++;
                index = i;
            }
        }
        formList.RemoveAt(index);
        if (count > 1)
        {
            //Debug.LogError(form.Table.Id + ":" + form.Table.Name + "被重复打开了!");
            form.Cover();
        }
        else
        {
            form.Close();
            GameObject.Destroy(form.gameObject);
            Resources.UnloadUnusedAssets();
            GC.Collect();
        }
    }
コード例 #6
0
ファイル: UIModule.cs プロジェクト: PenpenLi/BIG_HEAD
    public UIFormBase GetForm(int formId)
    {
        UIFormTableSetting config = UIFormTableSettings.Get((int)formId);

        if (config == null)
        {
            Debug.LogError("The UI[" + formId.ToString() + "] is not configed!");
            return(null);
        }
        //可以重复打开多个
        if ((UIFormsGroup)config.Group == UIFormsGroup.Toast || (UIFormsGroup)config.Group == UIFormsGroup.Dialog)
        {
            return(null);
        }
        UIFormBase form = null;

        switch ((UIFormsShowMode)config.ShowMode)
        {
        case UIFormsShowMode.Pop:
            foreach (var item in dicForms[UIFormsShowMode.Pop])
            {
                if (item != null && item.Table.Id == config.Id)
                {
                    form = item;
                }
            }
            break;

        case UIFormsShowMode.HideOther:
            foreach (var item in dicForms[UIFormsShowMode.HideOther])
            {
                if (item != null && item.Table.Id == config.Id)
                {
                    form = item;
                }
            }
            break;

        case UIFormsShowMode.Single:
            foreach (var item in dicForms[UIFormsShowMode.Single])
            {
                if (item != null && item.Table.Id == config.Id)
                {
                    form = item;
                }
            }
            break;

        case UIFormsShowMode.Normal:
        default:
            foreach (var item in dicForms[UIFormsShowMode.Normal])
            {
                if (item != null && item.Table.Id == config.Id)
                {
                    form = item;
                }
            }
            break;
        }
        return(form);
    }
コード例 #7
0
ファイル: UIModule.cs プロジェクト: PenpenLi/BIG_HEAD
    void ProcessForm(UIFormBase form, UIFormTableSetting config, object userdata, bool isOld)
    {
        //设置层级
        UIPanel[]      panels       = form.transform.GetComponentsInChildren <UIPanel>(true);
        List <UIPanel> sortedPanels = new List <UIPanel>(panels);

        sortedPanels.Sort((p1, p2) => p1.depth.CompareTo(p2.depth));
        UIFormsGroup group = (UIFormsGroup)config.Group;

        for (int i = 0; i < sortedPanels.Count; i++)
        {
            if (!baseDepths.ContainsKey(group))
            {
                baseDepths[group] = config.Group * 1000 * 1000;
            }
            sortedPanels[i].depth = baseDepths[group] + i;
        }
        form.StartDepth    = baseDepths[group];
        baseDepths[group] += panels.Length;
        //设置显示逻辑
        UIFormsShowMode mode = (UIFormsShowMode)config.ShowMode;

        form.transform.SetParent(dicFormRoots[mode].transform);
        form.transform.localPosition    = Vector3.zero;
        form.transform.localScale       = Vector3.one;
        form.transform.localEulerAngles = Vector3.zero;
        List <UIFormBase> formList = null;

        switch (mode)
        {
        case UIFormsShowMode.Pop:
            formList = dicForms[mode];
            if (formList.Count > 0 && formList[formList.Count - 1] != null)
            {
                formList[formList.Count - 1].Cover();
            }
            form.Init(config, userdata);
            formList.Add(form);
            if (dicForms[UIFormsShowMode.Single].Count > 0)
            {
                form.Cover();
            }
            break;

        case UIFormsShowMode.HideOther:
            formList = dicForms[mode];
            for (int i = 0; i < dicForms[UIFormsShowMode.HideOther].Count; i++)
            {
                dicForms[UIFormsShowMode.HideOther][i].Cover();
            }
            for (int i = 0; i < dicForms[UIFormsShowMode.Normal].Count; i++)
            {
                dicForms[UIFormsShowMode.Normal][i].Cover();
            }
            form.Init(config, userdata);
            formList.Add(form);
            if (dicForms[UIFormsShowMode.Single].Count > 0)
            {
                form.Cover();
            }
            break;

        case UIFormsShowMode.Single:
            formList = dicForms[mode];
            for (int i = 0; i < dicForms[UIFormsShowMode.HideOther].Count; i++)
            {
                dicForms[UIFormsShowMode.HideOther][i].Cover();
            }
            for (int i = 0; i < dicForms[UIFormsShowMode.Normal].Count; i++)
            {
                dicForms[UIFormsShowMode.Normal][i].Cover();
            }
            for (int i = 0; i < dicForms[UIFormsShowMode.Pop].Count; i++)
            {
                dicForms[UIFormsShowMode.Pop][i].Cover();
            }
            form.Init(config, userdata);
            formList.Add(form);
            break;

        case UIFormsShowMode.Normal:
        default:
            formList = dicForms[UIFormsShowMode.Normal];
            form.Init(config, userdata);
            formList.Add(form);
            if (dicForms[UIFormsShowMode.HideOther].Count > 0)
            {
                form.Cover();
            }
            if (dicForms[UIFormsShowMode.Single].Count > 0)
            {
                form.Cover();
            }
            break;
        }
    }