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); }
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(); }
//由于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); }
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]); }
// 添加窗口物件 public void AddView(IUIWndView view, WndLayerDef layer) { RectTransform trans = GetWndLayerTrans(layer); if (view == null || trans == null) { return; } view.GetTransform().SetParent(trans, false); }
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); }
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); } }
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); }
/// <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); }
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); }
/// <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); } } }
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); }
/// <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()); } } }
public static int CalculateLayerOrder(WndLayerDef _eLayer) { return(0);//(int)_eLayer * LayerOrderDelta;//值越大,越后渲染 }