Example #1
0
    public void OpenUIWindow(UIWindows windowKey, object args)
    {
        if (_windowsStack.Count != 0)
        {
            _windowsStack[_windowsStack.Count - 1].BecomeInvisible();
            SetVisible(_windowsStack[_windowsStack.Count - 1].gameObject, false);
        }

        // 注意释放该window变量
        GetWindow(windowKey, args);

        // if (windowID == (int)UIWindows.StatusWindow)//statuswindow特殊,不在windowStack中
        // {
        // defaultWindowList.Add(windowID, window);
        // return;
        // }
        // // TODO UI转换效果
        // var canvasGroup = window.GetComponent<CanvasGroup>();
        // if (canvasGroup != null)
        // {
        //     canvasGroup.alpha = 0;
        //     DOTween.To(() => canvasGroup.alpha, x => canvasGroup.alpha = x, 1f, 0.5f);
        // }
        //
        // var requestWindow = window.GetComponent<UIWindow>();
        // if (_windowsStack.Contains(requestWindow)) _windowsStack.Remove(requestWindow);
        // _windowsStack.Add(requestWindow);
    }
        public void OpenWindow(UIWindows windowType, WindowConfig config = null)
        {
            if (!IsWindowExists(windowType))
            {
                Debug.Log($" # -UI- # Window not defined for window type: `{windowType}`");
                return;
            }

            if (IsWindowOpened(windowType))
            {
                Debug.Log($" # -UI- # Window `{windowType}` already opened!");
                return;
            }

            var newWindow = uiWindows[windowType];

            if (newWindow.CloseOthers)
            {
                CloseAllWindows();
            }

            if (config != null)
            {
                newWindow.SetConfig(config);
            }

            newWindow.Open();
            newWindow.transform.SetAsLastSibling();
            currentWindows.Add(newWindow);
        }
        public bool IsWindowOpened(UIWindows type)
        {
            if (!IsWindowExists(type))
            {
                return(false);
            }

            return(currentWindows.Exists(x => x == uiWindows[type]));
        }
        public void CloseWindow(UIWindows type)
        {
            if (!IsWindowExists(type))
            {
                return;
            }

            var window = currentWindows.Find(x => x == uiWindows[type]);

            currentWindows.Remove(window);
            window.Close();
        }
Example #5
0
 public IObservable <UIWindow> OpenWindow(UIWindows window)
 {
     return(OpenWindow(window.ToString()));
 }
Example #6
0
 public void OpenWindow(UIWindows windowType)
 {
     m_windows[windowType].SetActive(true);
 }
Example #7
0
    private void GetWindow(UIWindows windowKey, object args)
    {
        if (_windowPool == null)
        {
            _windowPool = new List <UIWindow>();
        }
        UIWindow requestWindow = null;

        // 如果缓存池中有,则直接加载
        for (var i = 0; i < _windowPool.Count; i++)
        {
            if (_windowPool[i].windowKey == windowKey)
            {
                requestWindow = _windowPool[i];
                requestWindow.lastOpenTime = DateTime.Now;
                break;
            }
        }
        if (requestWindow != null)
        {
            if (_windowsStack.Contains(requestWindow))
            {
                _windowsStack.Remove(requestWindow);
            }
            _windowsStack.Add(requestWindow);

            SetVisible(requestWindow.gameObject, true);
            requestWindow.Set(args);
        }
        else
        {
            // 如果缓存池中没有,则从硬盘加载
            var windowName   = Enum.GetName(typeof(UIWindows), windowKey);
            var resourcePath = UIWindowDir;
            var resourceName = resourcePath + windowName;


            // requesetWindow = Instantiate(ResourceLoader.GetObjectDirectly<GameObject>(resourceName)).GetComponent<UIWindow>();
            if (Resources.Load(resourceName, typeof(GameObject)) != null)
            {
                requestWindow = (Instantiate(Resources.Load(resourceName, typeof(GameObject))) as GameObject)
                                .GetComponent <UIWindow>();
                requestWindow.transform.SetParent(UIRoot.transform);

                // 设置camera
                var canvases = requestWindow.transform.GetComponentsInChildren <Canvas>(true);
                for (var i = 0; i < canvases.Length; i++)
                {
                    canvases[i].worldCamera = UICamera;
                }
                var rect = requestWindow.GetComponent <RectTransform>();
                rect.pivot         = new Vector2(0.5f, 0.5f);
                rect.localPosition = Vector3.zero;
                rect.localScale    = Vector3.one;
                rect.sizeDelta     = Vector2.zero;
                requestWindow.Init(args);
                requestWindow.lastOpenTime = DateTime.Now;
                _windowPool.Add(requestWindow);

                // 如果超出缓存容量,删除最早打开的window
                if (_windowPool.Count > _poolCapacity)
                {
                    var forDestroyWindow = _windowPool[0];
                    for (var i = 1; i < _windowPool.Count; i++)
                    {
                        if (_windowPool[i].lastOpenTime < forDestroyWindow.lastOpenTime)
                        {
                            forDestroyWindow = _windowPool[i];
                        }
                    }
                    LogManager.Log("Remove Window:" + forDestroyWindow.gameObject.name);
                    _windowPool.Remove(forDestroyWindow);
                    forDestroyWindow.Clear();
                    TryUnloadAtlas(forDestroyWindow);
                    Destroy(forDestroyWindow.gameObject);
                    forDestroyWindow = null;
                }
                var canvasGroup = requestWindow.GetComponent <CanvasGroup>();
                if (canvasGroup != null)
                {
                    canvasGroup.alpha = 0;
                    DOTween.To(() => canvasGroup.alpha, x => canvasGroup.alpha = x, 1f, 0.5f);
                }

                if (_windowsStack.Contains(requestWindow))
                {
                    _windowsStack.Remove(requestWindow);
                }
                _windowsStack.Add(requestWindow);
            }
            else
            {
                ResourceManager.Instance.CreatePrefabObjectAsync(windowName, delegate(GameObject obj)
                {
                    requestWindow = obj.GetComponent <UIWindow>();
                    requestWindow.transform.SetParent(UIRoot.transform);

                    // 设置camera
                    var canvases = requestWindow.transform.GetComponentsInChildren <Canvas>(true);
                    for (var i = 0; i < canvases.Length; i++)
                    {
                        canvases[i].worldCamera = UICamera;
                    }
                    var rect           = requestWindow.GetComponent <RectTransform>();
                    rect.pivot         = new Vector2(0.5f, 0.5f);
                    rect.localPosition = Vector3.zero;
                    rect.localScale    = Vector3.one;
                    rect.sizeDelta     = Vector2.zero;
                    requestWindow.Init(args);
                    requestWindow.lastOpenTime = DateTime.Now;
                    _windowPool.Add(requestWindow);

                    // 如果超出缓存容量,删除最早打开的window
                    if (_windowPool.Count > _poolCapacity)
                    {
                        var forDestroyWindow = _windowPool[0];
                        for (var i = 1; i < _windowPool.Count; i++)
                        {
                            if (_windowPool[i].lastOpenTime < forDestroyWindow.lastOpenTime)
                            {
                                forDestroyWindow = _windowPool[i];
                            }
                        }
                        LogManager.Log("Remove Window:" + forDestroyWindow.gameObject.name);
                        _windowPool.Remove(forDestroyWindow);
                        forDestroyWindow.Clear();
                        TryUnloadAtlas(forDestroyWindow);
                        Destroy(forDestroyWindow.gameObject);
                        forDestroyWindow = null;
                    }

                    var canvasGroup = requestWindow.GetComponent <CanvasGroup>();
                    if (canvasGroup != null)
                    {
                        canvasGroup.alpha = 0;
                        DOTween.To(() => canvasGroup.alpha, x => canvasGroup.alpha = x, 1f, 0.5f);
                    }

                    if (_windowsStack.Contains(requestWindow))
                    {
                        _windowsStack.Remove(requestWindow);
                    }
                    _windowsStack.Add(requestWindow);
                });
            }
        }

        /*
         * //整理层,把默认window放到最上面,刚刚打开的window放到默认window下
         * windowObj.window.transform.SetAsLastSibling();
         *
         * var itr = defaultWindowList.GetEnumerator();
         * while (itr.MoveNext())
         * {
         *  itr.Current.Value.transform.SetAsLastSibling();
         * }
         * //如果打开的是enforcewindow,那么必须在billboardwindow下面,所以移到最上面
         * if (enforceWindow)
         *  windowObj.window.transform.SetAsFirstSibling();
         */
        //return requesetWindow.gameObject;
    }
Example #8
0
 public void OpenUIWindow(UIWindows windowKey)
 {
     OpenUIWindow(windowKey, null);
 }
Example #9
0
 private void Close()
 {
     UIWindows.Close(WindowType.Testing).OnComplete(() => Debug.Log("Closed"));
 }
Example #10
0
 private void Open()
 {
     UIWindows.Open(WindowType.Testing).OnComplete(() => Debug.Log("Opened"));
 }
Example #11
0
 public bool IsWindowExists(UIWindows type)
 {
     return(uiWindows.ContainsKey(type));
 }