Example #1
0
        public void Push <T>(bool allowMulti = false, params object[] parameters) where T : UIView
        {
            string assetPath = CheckAssetPath(typeof(T));

            if (string.IsNullOrEmpty(assetPath))
            {
                return;
            }

            int hashCode = typeof(T).GetHashCode();

            if (_stackUiAsset.Count > 0)
            {
                UiAsset uiAsset = _stackUiAsset.Peek();
                //如果界面已经打开 则不在执行
                if (uiAsset.AssetPath == assetPath && !allowMulti)
                {
                    return;
                }
                IUIView uiView = GetUiView(uiAsset);

                //触发暂停事件
                _uiPauseArgs.UIView = uiView;
                _event.Trigger(this, _uiPauseArgs);

                uiView.OnPause();
            }

            UiAsset newUiAsset = null;

            if (!allowMulti)
            {
                if (!_allUiAssets.TryGetValue(hashCode, out newUiAsset))
                {
                    newUiAsset             = new UiAsset(assetPath);
                    _allUiAssets[hashCode] = newUiAsset;
                }
            }
            else
            {
                newUiAsset = new UiAsset(assetPath);
            }

            _stackUiAsset.Push(newUiAsset);
            UIView newUiView = GetUiView(newUiAsset);

            newUiView.OnEnter(parameters);

            //触发打开事件
            _uiEnterArgs.UIView = newUiView;
            _event.Trigger(this, _uiEnterArgs);
        }
Example #2
0
        //获取ui界面
        private UIView GetUiView(UiAsset uiAsset)
        {
            UIView uiView;

            if (!_allUiViews.TryGetValue(uiAsset, out uiView))
            {
                GameObject uiViewSource = _resource.LoadAsset <GameObject>(uiAsset.AssetPath);
                if (uiViewSource == null)
                {
                    return(null);
                }
                GameObject uiViewClone = GameObject.Instantiate(uiViewSource);
                uiView = uiViewClone.GetComponent <UIView>();
                if (uiView == null)
                {
                    return(null);
                }
                _allUiViews[uiAsset] = uiView;
                return(_allUiViews[uiAsset]);
            }
            uiView.gameObject.SetActive(true);
            return(uiView);
        }
Example #3
0
        public void Pop(bool isDestory = false)
        {
            //移除当前UI
            if (_stackUiAsset.Count > 0)
            {
                UiAsset lastUiAsset = _stackUiAsset.Pop();
                UIView  lastUiView;
                if (_allUiViews.TryGetValue(lastUiAsset, out lastUiView))
                {
                    //触发关闭事件
                    _uiExitArgs.UIView = lastUiView;
                    _event.Trigger(this, _uiExitArgs);

                    lastUiView.OnExit();
                    if (isDestory)
                    {
                        _allUiViews.Remove(lastUiAsset);
                        MonoBehaviour.Destroy(lastUiView);
                    }
                    else
                    {
                        lastUiView.gameObject.SetActive(false);
                    }
                }
            }

            if (_stackUiAsset.Count > 0)
            {
                UiAsset uiAsset    = _stackUiAsset.Peek();
                UIView  lastUiView = GetUiView(uiAsset);
                lastUiView.OnResume();

                //触发恢复事件
                _uiResumeArgs.UIView = lastUiView;
                _event.Trigger(this, _uiResumeArgs);
            }
        }