Example #1
0
        protected bool CheckShowCursorByWNDLayer(WndLayerDef _eLayer)
        {
            RectTransform layerTrans = m_layerTransform[(int)_eLayer];

            if (layerTrans == null)
            {
                return(false);
            }

            for (int i = layerTrans.childCount - 1; i >= 0; --i)
            {
                Transform wndViewTrans = layerTrans.GetChild(i);
                if (wndViewTrans.gameObject.activeSelf)
                {
                    IUIWndView view = wndViewTrans.GetComponent <IUIWndView>();
                    if (view != null)
                    {
                        IUIWnd wnd = view.GetUIWnd();
                        if (wnd.IsCanCloseKey() || _eLayer == WndLayerDef.WND_LAYER_FILL)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #2
0
        public static void RegisterUILayer(WndLayerDef _nLayerDef, USpeedUILayer _nLayer)
        {
            if (_nLayerDef == WndLayerDef.WND_LAYER_MAX || _nLayerDef == WndLayerDef.WND_LAYER_NONE)
            {
                return;
            }

            if (instance.m_DicLayer.ContainsKey(_nLayerDef))
            {
                return;
            }

            instance.m_DicLayer.Add(_nLayerDef, _nLayer);

            //重新调整canvas的Sorting信息
            _nLayer.LayerCanvas.overrideSorting = true;

            //调整SortingLayer,目前都统一用一个Layer,layer多的话会影响渲染效率
            _nLayer.LayerCanvas.sortingLayerName = CalculateLayerName(_nLayerDef);
            //调整SortingOrder
            _nLayer.LayerCanvas.sortingOrder = CheckSortingOrderRange(CalculateLayerOrder(_nLayerDef));

            //计算Layer的Z轴坐标 layerDef越大,越靠近相机
            Vector3 tmpPos = _nLayer.GetTransform.localPosition;

            tmpPos.z = ((int)WndLayerDef.WND_LAYER_MAX - (int)_nLayerDef) * LayerZAxisDistance;
            _nLayer.GetTransform.localPosition = tmpPos;

            instance.RegisterFailedElementAgain();
        }
Example #3
0
        //由于SortingOrder有限为了方便,使用了4个SortingLayer区分
        public static string CalculateLayerName(WndLayerDef _nLayerDef = WndLayerDef.WND_LAYER_NONE)
        {
            string tmpSortingLayerName = string.Empty;

            switch (_nLayerDef)
            {
            case WndLayerDef.WND_LAYER_FIXED:
            {
                tmpSortingLayerName = Config.SortingLayerUI_FIXED;
            }
            break;

            case WndLayerDef.WND_LAYER_POPUP01:
            {
                tmpSortingLayerName = Config.SortingLayerUI_POPUP01;
            }
            break;

            case WndLayerDef.WND_LAYER_FILL:
            {
                tmpSortingLayerName = Config.SortingLayerUI_FILL;
            }
            break;

            case WndLayerDef.WND_LAYER_POPUP02:
            {
                tmpSortingLayerName = Config.SortingLayerUI_POPUP02;
            }
            break;

            case WndLayerDef.WND_LAYER_OVERHEAD:
            {
                tmpSortingLayerName = Config.SortingLayerUI_OVERHEAD;
            }
            break;

            case WndLayerDef.WND_LAYER_MAX:
            {
                tmpSortingLayerName = Config.SortingLayerUI;
            }
            break;

            case WndLayerDef.WND_LAYER_NONE:
            default:
                return(Config.LayerDefault);
            }

            //调整SortingLayer,目前都统一用一个Layer,layer多的话会影响渲染效率
            if (!SortingLayer.layers.Any(x => x.name == tmpSortingLayerName))
            {
                Trace.LogWarning("没有名称为:" + Config.SortingLayerUI + " 的SortingLayer,使用默认的");
                tmpSortingLayerName = SortingLayer.layers[0].name;
            }
            return(tmpSortingLayerName);
        }
Example #4
0
        public RectTransform GetWndLayerTrans(WndLayerDef layer)
        {
            int index = (int)layer;

            if (null == m_layerTransform || index < 0 || index >= m_layerTransform.Length)
            {
                return(null);
            }

            return(m_layerTransform[index]);
        }
Example #5
0
        // 添加窗口物件
        public void AddView(IUIWndView view, WndLayerDef layer)
        {
            RectTransform trans = GetWndLayerTrans(layer);

            if (view == null || trans == null)
            {
                return;
            }

            view.GetTransform().SetParent(trans, false);
        }
Example #6
0
        public static USpeedUILayer GetUILayer(WndLayerDef _nLayerDef)
        {
            USpeedUILayer tmpLayer;

            if (instance.m_DicLayer.TryGetValue(_nLayerDef, out tmpLayer))
            {
                return(tmpLayer);
            }

            Trace.LogWarning(_nLayerDef.ToString() + " 对应的UILayer目前没注册。");
            return(null);
        }
Example #7
0
        public static void UnRegisterUILayer(WndLayerDef _nLayerDef, USpeedUILayer _nLayer)
        {
            if (_nLayerDef == WndLayerDef.WND_LAYER_MAX || _nLayerDef == WndLayerDef.WND_LAYER_NONE)
            {
                return;
            }

            if (instance.m_DicLayer.ContainsKey(_nLayerDef))
            {
                instance.m_DicLayer.Remove(_nLayerDef);
            }
        }
Example #8
0
        private void SetupUILayer(WndLayerDef _nLayerDef)
        {
            USpeedUILayer tmpUILayer = null;

            tmpUILayer = m_layerTransform[(int)_nLayerDef].GetComponent <USpeedUILayer>();
            if (tmpUILayer == null)
            {
                tmpUILayer = m_layerTransform[(int)_nLayerDef].gameObject.AddComponent <USpeedUILayer>();
            }

            tmpUILayer.UILayerDef         = _nLayerDef;
            tmpUILayer.RaycasterLayerMask = 1 << LayerMask.NameToLayer(Config.LayerUI);
        }
Example #9
0
        /// <summary>
        /// 高级别互斥界面是否有显示
        /// </summary>
        /// <param name="_eJudgeWndLayer">需要判断的层</param>
        /// <returns></returns>
        public bool IsWndLayerHasHighMutexWndShow(WndLayerDef _eJudgeWndLayer)
        {
            IUIWnd tmpUIWnd = null;

            foreach (var wndID in Enum.GetValues(typeof(WndID)))
            {
                tmpUIWnd = GetWnd((WndID)wndID);
                if (tmpUIWnd != null && tmpUIWnd.GetLayer() == _eJudgeWndLayer && tmpUIWnd.IsVisible() && tmpUIWnd.GetMutexLevel() > WndMutexLevelDef.WND_Mutex_Normal)
                {
                    return(true);
                }
            }
            return(false);
        }
Example #10
0
        private bool IsWndLayerHasVisibleWnd(WndLayerDef _eJudgeWndLayer)
        {
            IUIWnd tmpUIWnd = null;

            foreach (var wndID in Enum.GetValues(typeof(WndID)))
            {
                tmpUIWnd = GetWnd((WndID)wndID);
                if (tmpUIWnd != null && tmpUIWnd.GetLayer() == _eJudgeWndLayer && tmpUIWnd.IsVisible())
                {
                    return(true);
                }
            }
            return(false);
        }
Example #11
0
        /// <summary>
        /// 某一层设为显示,其余层则设为隐藏
        /// </summary>
        /// <param name="_eWndLayerVisible">需要显示的层</param>
        /// <param name="_eWndLayerNotVisible">需要隐藏的层</param>
        internal void SetWndLayerVisible_Not(WndLayerDef _eWndLayerVisible, params WndLayerDef[] _eWndLayerNotVisible)
        {
            bool bHasFillViewVisible = false;

            bHasFillViewVisible = IsWndLayerHasVisibleWnd(_eWndLayerVisible);

            foreach (WndLayerDef e in _eWndLayerNotVisible)
            {
                if (e != WndLayerDef.WND_LAYER_NONE && e != WndLayerDef.WND_LAYER_MAX)
                {
                    GetWndLayerTrans(e).gameObject.SetActive(!bHasFillViewVisible);
                }
            }
        }
Example #12
0
        public void CheckShowCursor()
        {
            //有泉水buff时一直显示
            {
                if (GameLogicAPI.IsExistBuff(1044))
                {
                    SoldierCamera.MainInstance <SoldierCamera>().bFPSShowCursor = true;
                    return;
                }
            }

            //死亡下一直显示
            {
                if (EntityFactory.MainHeroView != null && EntityFactory.MainHeroView.StateMachine != null && EntityFactory.MainHeroView.StateMachine.GetState() == GameLogic.EntityState.Dead)
                {
                    SoldierCamera.MainInstance <SoldierCamera>().bFPSShowCursor = true;
                    return;
                }
            }

            //没死亡
            {
                bool containUI = false;

                for (WndLayerDef i = WndLayerDef.WND_LAYER_POPUP02; i >= WndLayerDef.WND_LAYER_POPUP01; --i)
                {
                    containUI = CheckShowCursorByWNDLayer(i);
                    if (containUI)
                    {
                        break;
                    }
                }


                if (containUI && !SoldierCamera.MainInstance <SoldierCamera>().bFPSShowCursor)
                {
                    SoldierCamera.MainInstance <SoldierCamera>().bFPSShowCursor = true;
                    return;
                }
                else if (!containUI && SoldierCamera.MainInstance <SoldierCamera>().bFPSShowCursor)
                {
                    SoldierCamera.MainInstance <SoldierCamera>().bFPSShowCursor = false;
                    return;
                }
            }
            //Cursor.lockState = (SoldierCamera.MainInstance<SoldierCamera>().bFPSShowCursor ? CursorLockMode.None : CursorLockMode.Locked);
        }
Example #13
0
        /// <summary>
        /// _wnd界面当WND_LAYER_FILL有显示中的界面时,将更改_wnd的层为_eNewWndLayer
        /// </summary>
        /// <param name="_wnd">需要更改的界面</param>
        /// <param name="_eNewWndLayer">更改的层</param>
        internal void SetWndRenderAfterTheFillLayer(IUIWndView _wnd, WndLayerDef _eNewWndLayer)
        {
            //当Fill层有界面显示着的时候
            if (UISystem.Instance != null)
            {
                bool bHasFillView = false;

                bHasFillView = IsWndLayerHasVisibleWnd(WndLayerDef.WND_LAYER_FILL);

                //将view提升至Popup02层
                if (bHasFillView)
                {
                    AddView(_wnd, _eNewWndLayer);
                }
                else
                {
                    ;//m_WndRenderAfterFillLayerVisible.Add(_wnd.GetUIWnd());
                }
            }
        }
Example #14
0
 public static int CalculateLayerOrder(WndLayerDef _eLayer)
 {
     return(0);//(int)_eLayer * LayerOrderDelta;//值越大,越后渲染
 }