Exemple #1
0
    /// <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);
        }
    }
Exemple #2
0
 /// <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");
 }