Exemplo n.º 1
0
 private bool Exist(IUIDlg dlg)
 {
     if (dlg.pushStack)
     {
         var e = m_stack.GetEnumerator();
         while (e.MoveNext())
         {
             if (e.Current.id == dlg.id)
             {
                 return(true);
             }
         }
     }
     else
     {
         var e2 = m_list.GetEnumerator();
         while (e2.MoveNext())
         {
             if (e2.Current.id == dlg.id)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Exemplo n.º 2
0
 public bool Unload(IUIDlg dlg)
 {
     if (Exist(dlg))
     {
         if (dlg.pushStack)
         {
             var v = m_stack.Peek();
             if (v.id == dlg.id)
             {
                 DestroyDlg(dlg);
                 m_stack.Pop();
             }
             else
             {
                 XDebug.LogError("dlg is not in stack ", dlg.fileName);
             }
         }
         else
         {
             for (int i = 0, max = m_list.Count; i < max; i++)
             {
                 if (m_list[i].id == dlg.id)
                 {
                     DestroyDlg(dlg);
                     m_list.RemoveAt(i);
                     break;
                 }
             }
         }
         return(true);
     }
     return(false);
 }
Exemplo n.º 3
0
 public bool Hide(IUIDlg dlg)
 {
     if (Exist(dlg))
     {
         if (dlg.pushStack)
         {
             var v = m_stack.Peek();
             if (v.id == dlg.id)
             {
                 HideDlg(dlg);
                 m_stack.Pop();
             }
         }
         else
         {
             for (int max = m_list.Count, i = max - 1; i >= 0; i--)
             {
                 if (m_list[i].id == dlg.id)
                 {
                     HideDlg(dlg);
                     m_list.RemoveAt(i);
                     break;
                 }
             }
         }
     }
     return(true);
 }
Exemplo n.º 4
0
    public void LoadDlg(IUIDlg dlg)
    {
        if (!Exist(dlg))
        {
            if (m_recycle == null)
            {
                m_recycle = new Dictionary <uint, IUIDlg>();
            }
            if (m_recycle.ContainsKey(dlg.id))
            {
                m_recycle.Remove(dlg.id);
                dlg.innerBehaviour.gameObject.SetActive(true);
            }
            else
            {
                GameObject go = XResources.Load <GameObject>(dlg.fileName, AssetType.Prefab);
                go.transform.SetParent(dlg.shareCanvas ? _canvas.transform : _uiCamera.transform);
                if (!dlg.shareCanvas)
                {
                    Canvas cans = go.GetComponent <Canvas>();
                    if (cans != null)
                    {
                        cans.worldCamera = _uiCamera;
                    }
                }
                go.transform.localPosition = Vector3.zero;
                go.transform.localRotation = Quaternion.identity;
                go.transform.localScale    = Vector3.one;
                dlg.SetBehaviour(go);
                dlg.OnLoad();
            }
            if (dlg.pushStack)
            {
                m_stack.Push(dlg);
                _sort = dlg.innerBehaviour.SortDepth(_sort) + _gap;
                dlg.OnShow();
            }
            else
            {
                m_list.Add(dlg);
            }
        }
        if (!dlg.pushStack) //不在栈中的ui 每次调用的时候都展示在最前 不管之前是否cache
        {
            if (dlg.type == DlgType.Top)
            {
                dlg.innerBehaviour.SortDepth(_top);
            }
            else if (dlg.type == DlgType.Surface)
            {
                _sort = dlg.innerBehaviour.SortDepth(_sort) + _gap;
            }

            dlg.OnShow();
        }
    }
Exemplo n.º 5
0
 private void DestroyDlg(IUIDlg dlg)
 {
     dlg.OnDestroy();
     XResources.Destroy(dlg.innerBehaviour.gameObject);
 }
Exemplo n.º 6
0
 private void HideDlg(IUIDlg dlg)
 {
     dlg.OnHide();
     dlg.innerBehaviour.gameObject.SetActive(false);
     m_recycle[dlg.id] = dlg;
 }