示例#1
0
        private IEnumerator _returnLastWindow()
        {
            if (m_windows_name_stack.Count <= 1)
            {
                Debug.LogErrorFormat("Windows型界面的Stack已经到底,不能再返回");
                yield break;
            }
            // 先处理当前窗口的隐藏
            UIBase hide_win_obj = _getLoadedUI(m_windows_name_stack.Pop());

            if (hide_win_obj == null)
            {
                Debug.LogErrorFormat("当前Window为空");
                yield break;
            }
            UIBase show_win_obj = _getLoadedUI(m_windows_name_stack.Peek());

            if (show_win_obj == null)
            {
                _createUI(m_windows_name_stack.Peek(), _base => { show_win_obj = _base; });
            }
            Single exit_time = hide_win_obj.PlayExitAnimation();

            if (exit_time > Single.Epsilon)
            {
                yield return(new WaitForSeconds(exit_time));
            }
            _handleUIHide(hide_win_obj);

            yield return(new WaitUntil(() => show_win_obj != null));

            // 处理新窗口的显示
            _showOrHide(show_win_obj, true);
            show_win_obj.transform.SetAsLastSibling();
            _resetLayerSortingOrder(show_win_obj.Layer);
            show_win_obj.PreShow(hide_win_obj);

            Single entrance_time = show_win_obj.PlayEntranceAnimation();

            if (entrance_time > Single.Epsilon)
            {
                yield return(new WaitForSeconds(entrance_time));
            }
            show_win_obj.OnShow(hide_win_obj);
        }
示例#2
0
        private IEnumerator _showDialog(UIBase _ui_dialog, params object[] _args)
        {
            _showOrHide(_ui_dialog, true);
            _ui_dialog.transform.SetAsLastSibling();
            _resetLayerSortingOrder(_ui_dialog.Layer);
            _ui_dialog.PreShow(null, _args);

            Single entrance_time = _ui_dialog.PlayEntranceAnimation();

            m_dialog_name_list.AddLast(_ui_dialog.name);

            if (entrance_time > float.Epsilon)
            {
                yield return(new WaitForSeconds(entrance_time));
            }

            _ui_dialog.OnShow(null, _args);
        }
示例#3
0
        public void ShowUI(string _name, params object[] _args)
        {
            UIBase ui_obj = _getLoadedUI(_name);

            if (ui_obj != null && ui_obj.IsShow())
            {
                ui_obj.transform.SetAsLastSibling();
                _resetLayerSortingOrder(ui_obj.Layer);
                ui_obj.PreShow(null, _args);
                return;
            }
            if (ui_obj == null)
            {
                _createUI(_name, _base =>
                {
                    if (_base.Type == UIType.Window)
                    {
                        StartCoroutine(_showWindow(_base, _args));
                    }
                    else if (_base.Type == UIType.Dialog)
                    {
                        StartCoroutine(_showDialog(_base, _args));
                    }
                });
            }
            else
            {
                if (ui_obj.Type == UIType.Window)
                {
                    StartCoroutine(_showWindow(ui_obj, _args));
                }
                else if (ui_obj.Type == UIType.Dialog)
                {
                    StartCoroutine(_showDialog(ui_obj, _args));
                }
            }
        }
示例#4
0
        private IEnumerator _showWindow(UIBase _ui_object, params object[] _args)
        {
            UIBase current_win_obj = null;

            //播放上一个界面的退场动画和事件回调
            if (m_windows_name_stack.Count != 0)
            {
                current_win_obj = _getLoadedUI(m_windows_name_stack.Peek());
                if (current_win_obj != null)
                {
                    Single exit_time = current_win_obj.PlayExitAnimation();

                    if (exit_time > Single.Epsilon)
                    {
                        yield return(new WaitForSeconds(exit_time));
                    }

                    _handleUIHide(current_win_obj);
                }
            }
            //播放当前界面的入场动画和事件回调
            _showOrHide(_ui_object, true);
            _ui_object.transform.SetAsLastSibling();
            _resetLayerSortingOrder(_ui_object.Layer);
            _ui_object.PreShow(current_win_obj, _args);

            Single entrance_time = _ui_object.PlayEntranceAnimation();

            m_windows_name_stack.Push(_ui_object.name);

            if (entrance_time > Single.Epsilon)
            {
                yield return(new WaitForSeconds(entrance_time));
            }

            _ui_object.OnShow(current_win_obj, _args);
        }