コード例 #1
0
 /// <summary>
 /// 检查缓存区~如果超过最大上限值,则进行清理,如果链存在不进行清理,一般情况下,链的长度不会超过缓存大小
 /// </summary>
 private void CheckCach()
 {
     if (cacheWndDict.Count < MAX_CACH_WND)
     {
         return;
     }
     else
     {
         int       minDepth = MAX_CACH_WND;
         UIWndBase wnd      = null;
         foreach (KeyValuePair <WindowID, UIWndBase> pair in cacheWndDict)
         {
             if (pair.Value.Depth < minDepth && !backStack.Contains(pair.Value))
             {
                 minDepth = pair.Value.Depth;
                 wnd      = pair.Value;
             }
         }
         if (wnd != null)
         {
             Destroy(wnd.gameObject);
             cacheWndDict.Remove(wnd.wndID);
         }
     }
 }
コード例 #2
0
ファイル: UIManager.cs プロジェクト: ChestnutGames/boxing
    void RegisterWindow(UIWndBase wnd)
    {
        wnd.Show();
        Type t = wnd.GetType();

        mWindowDic[t]         = wnd;
        wnd.DestroyWndHandler = (wd, e) => { RemoveWindow(wd); };
    }
コード例 #3
0
ファイル: UIManager.cs プロジェクト: ChestnutGames/boxing
 /// <summary>
 /// 销毁窗口
 /// </summary>
 /// <returns></returns>
 public void DestroyWindow <T>() where T : UIWndBase
 {
     if (mWindowDic.ContainsKey(typeof(T)))
     {
         UIWndBase wnd = mWindowDic[typeof(T)];
         RemoveWindow <T>();
         wnd.Destroy();
     }
 }
コード例 #4
0
ファイル: UIManager.cs プロジェクト: ChestnutGames/boxing
    /// <summary>
    /// 从字典移除窗口
    /// </summary>
    /// <returns></returns>
    public UIWndBase RemoveWindow <T>() where T : UIWndBase
    {
        UIWndBase wnd = null;

        if (mWindowDic.ContainsKey(typeof(T)))
        {
            wnd = mWindowDic[typeof(T)];
            mWindowDic.Remove(typeof(T));
        }
        return(wnd);
    }
コード例 #5
0
 /// <summary>
 /// 向指定窗口发送消息
 /// </summary>
 public void SendMsg(WindowID wndId, WindowMsgID msgId, object param)
 {
     if (cacheWndDict.ContainsKey(wndId))
     {
         UIWndBase wnd = cacheWndDict [wndId];
         wnd.OnMsg(msgId, param);
     }
     else
     {
         Debug.Log("窗口不在缓存中, 事件更新失败");
     }
 }
コード例 #6
0
ファイル: UIManager.cs プロジェクト: ChestnutGames/boxing
 /// <summary>
 /// 隐藏窗口
 /// </summary>
 /// <param name="wnd"></param>
 /// <returns></returns>
 public void HideWindow(UIWndBase wnd)
 {
     foreach (Type t in mWindowDic.Keys.ToArray())
     {
         if (mWindowDic[t] == wnd)
         {
             mWindowDic[t].Show(false);
             mWindowDic[t].transform.position = hidPos;
             break;
         }
     }
 }
コード例 #7
0
ファイル: UIManager.cs プロジェクト: ChestnutGames/boxing
 /// <summary>
 /// 销毁窗口
 /// </summary>
 /// <param name="wnd"></param>
 /// <returns></returns>
 public void DestroyWindow(UIWndBase wnd)
 {
     foreach (Type t in mWindowDic.Keys.ToArray())
     {
         if (mWindowDic[t] == wnd)
         {
             mWindowDic.Remove(t);
             wnd.Destroy();
             break;
         }
     }
 }
コード例 #8
0
 /// <summary>
 /// 窗口显示,队列型加载
 /// </summary>
 public void ShowWindow(WindowID windowId, bool bAppend = false)
 {
     if (wndResDict.ContainsKey(windowId))
     {
         if (cacheWndDict.ContainsKey(windowId))
         {
             UIWndBase wnd = cacheWndDict [windowId];
             if (wnd.status == WindowStatus.Inactive)
             {
                 if (bAppend)
                 {
                     if (backStack.Count == 0)
                     {
                         backStack.Push(curShowWnd);
                     }
                     backStack.Push(wnd);
                     AdjustAlpha();
                 }
                 else
                 {
                     HideAllCach();
                     BreakBackStack();
                     curShowWnd.Close();
                 }
                 wnd.Show();
                 curShowWnd = wnd;
             }
             else if (wnd.status == WindowStatus.Gray)
             {
                 curShowWnd.Close();
                 curShowWnd = wnd;
                 backStack.Pop();
                 AdjustAlpha();
             }
             else if (wnd.status == WindowStatus.Active)
             {
                 Debug.Log("当前窗口已经是显示窗口");
             }
             wnd.Refresh();
         }
         else
         {
             RealShow(windowId, bAppend);
         }
     }
     else
     {
         Debug.Log(windowId.ToString() + " 不存在资源");
     }
 }
コード例 #9
0
ファイル: UIManager.cs プロジェクト: ChestnutGames/boxing
    /// <summary>
    /// 从字典移除窗口
    /// </summary>
    /// <param name="wnd"></param>
    /// <returns></returns>
    public UIWndBase RemoveWindow(UIWndBase wnd)
    {
        UIWndBase _wnd = null;

        foreach (Type t in mWindowDic.Keys.ToArray())
        {
            if (mWindowDic[t] == wnd)
            {
                _wnd = mWindowDic[t];
                mWindowDic.Remove(t);
                break;
            }
        }
        return(_wnd);
    }
コード例 #10
0
    private void RealShow(WindowID windowId, bool bAppend)
    {
        string     wndPath = wndResDict [windowId];
        GameObject prefab  = null;

        if (GameManager.Instance.ResFrom != ResourceFrom.Bundle)
        {
            prefab = ResourceManager.LoadResource("UIPrefab/" + windowId.ToString()) as GameObject;
        }
        else
        {
            prefab = ResourceManager.GetInstance().LoadAsset(wndPath, windowId.ToString());
        }

        if (prefab != null)
        {
            GameObject clone = (GameObject)GameObject.Instantiate(prefab);
            UnityTools.AddChildToTarget(wndRoot.transform, clone.transform);
            UIWndBase wnd = clone.GetComponent <UIWndBase> ();
            wnd.status = WindowStatus.Active;
            if (curShowWnd != null)
            {
                wnd.preWndID = curShowWnd.wndID;
            }
            wnd.wndID = windowId;
            if (bAppend)
            {
                if (backStack.Count == 0)
                {
                    backStack.Push(curShowWnd);
                }
                curShowWnd = wnd;
                backStack.Push(curShowWnd);
                AdjustAlpha();
            }
            else
            {
                curShowWnd = wnd;
                HideAllCach();
                BreakBackStack();
            }
            cacheWndDict.Add(windowId, curShowWnd);
            curShowWnd.AdjustAlpha(1.0f);
            CheckCach();
            wnd.Refresh();
        }
    }