/// <summary> /// 根据当前显示面板重新检测当前获取焦点面板 /// </summary> /// <param name="panelID">当前显示面板</param> private void CheckFocusDatas(PanelID panelID) { LocalPanelInfo panelInfo = null; if (!TryGetLocalPanelInfo(panelID, out panelInfo) || !panelInfo.IsNeedCalculateFocus) { return; } PanelRootType rootType = UIRootHelper.Instance.GetRootTypePanelType(panelInfo.PType); oldFocusTempData.Clear(); curFocusTempData.Clear(); oldFocusTempData.AddRange(GetFocusPanels()); RemoveAllFocusPanel(); PanelRootType tempRootType = PanelRootType.None; PanelRootType maxFocusRootType = PanelRootType.None; LocalPanelInfo tempPanelInfo = null; List <uint> showPanelsKeys = new List <uint>(); showPanelsKeys.AddRange(showPanels); PanelID showNormal = PanelID.None; int maxRootPanelDepth = 0; UIPanelBase tempPanelBase = null; PanelID pid = PanelID.None; for (int i = 0; i < showPanelsKeys.Count; i++) { pid = (PanelID)showPanelsKeys[i]; if (!TryGetLocalPanelInfo(pid, out tempPanelInfo) || !tempPanelInfo.IsNeedCalculateFocus) { continue; } if (tempPanelInfo.PType == PanelType.Normal) { showNormal = tempPanelInfo.PID; } tempRootType = UIRootHelper.Instance.GetRootTypePanelType(tempPanelInfo.PType); if ((tempRootType == PanelRootType.None || maxFocusRootType < tempRootType) && tempRootType != PanelRootType.MarQueen //&& tempPanelInfo.PType != PanelType.SmartPopUp ) { maxFocusRootType = tempRootType; } tempPanelBase = GetPanel(pid); if (tempRootType == maxFocusRootType && tempPanelBase.Depth > maxRootPanelDepth) { maxRootPanelDepth = tempPanelBase.Depth; } } for (int i = 0; i < showPanelsKeys.Count; i++) { pid = (PanelID)showPanelsKeys[i]; if (!TryGetLocalPanelInfo(pid, out tempPanelInfo) || !tempPanelInfo.IsNeedCalculateFocus) { continue; } tempRootType = UIRootHelper.Instance.GetRootTypePanelType(tempPanelInfo.PType); tempPanelBase = GetPanel(pid); if (tempRootType < maxFocusRootType) { if (maxFocusRootType == PanelRootType.Fixed) { if (showNormal != PanelID.None) { if (tempPanelBase.PanelId == showNormal) { AddFocusPanel(pid); } } else { AddFocusPanel(pid); } } } else if (tempRootType == maxFocusRootType) { if (maxFocusRootType == PanelRootType.Main || tempPanelBase.Depth >= maxRootPanelDepth) { AddFocusPanel(pid); } } else if (tempRootType > maxFocusRootType) { AddFocusPanel(pid); } } //3、对比焦点变化的面板 curFocusTempData.AddRange(GetFocusPanels()); PanelFocusData focusData = new PanelFocusData(); focusData.GetFocus = false; for (int i = 0; i < oldFocusTempData.Count; i++) { if (curFocusTempData.Contains(oldFocusTempData[i])) { curFocusTempData.Remove(oldFocusTempData[i]); } else { focusData.ID = oldFocusTempData[i]; Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.UIEVENT_PANELFOCUSSTATUSCHANGED, focusData); } } focusData.GetFocus = true; for (int i = 0; i < curFocusTempData.Count; i++) { focusData.ID = curFocusTempData[i]; Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.UIEVENT_PANELFOCUSSTATUSCHANGED, focusData); } }
/// <summary> /// 面板获取焦点状态变化 /// </summary> /// <param name="focusData"></param> private void OnPanelFocusStatusChanged(PanelFocusData focusData) { //if (UIDefine.IsUIDebugLogEnable) // Engine.Utility.Log.LogGroup("WJH", "UIPanelManager:<color=orange>{0}->{1} FOCUS</color>", focusData.ID, (focusData.GetFocus) ? "GET" : "MISSING"); }