hch
5 天以前 a731fcb2b786b32dd7f0c0e184f7ba58ff44df3f
0312 优化引导逻辑-存在其他遮罩界面时等待引导
4个文件已修改
165 ■■■■ 已修改文件
Main/Component/UI/Common/PopupWindowsProcessor.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Manager/UIManager.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/NewBieGuidance/NewBieCenter.cs 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/NewBieGuidance/NewBieWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Common/PopupWindowsProcessor.cs
@@ -95,12 +95,16 @@
        if (!UIManager.Instance.IsOpened<HomeWin>())
            return;
        if (UIManager.Instance.IsOpened(popupWindowQueue[0].window))
        {
            //当前模式可以打开多个相同窗口,增加防范
            return;
        }
        if (UIManager.Instance.ExistAnyFullScreenOrMaskWin(popupWindowQueue[0].window))
            return;
        if (currentWindow.window != null)
        {
            //判断上一个推送是否关闭
Main/Manager/UIManager.cs
@@ -317,15 +317,39 @@
    public bool IsOpened(string uiName)
    {
        UIBase ui = GetUI(uiName);
        if (null != ui)
        {
            return ui.IsActive();
        }
        return false;
    }
    
    // 检查是否存在任何全屏或遮罩窗口, 暂未定义全屏可以统一勾选openMask
    public bool ExistAnyFullScreenOrMaskWin(string excludeUIName)
    {
        var exist = false;
        foreach (var uiList in uiDict.Values)
        {
            // 遍历该类型的所有UI实例
            foreach (var ui in uiList)
            {
                // 刷新UI
                if (ui.IsActive() && ui.name != excludeUIName)
                {
                    if (ui.openMask)
                    {
                        exist = true;
                        break;
                    }
                }
            }
        }
        return exist;
    }
    // 获取指定类型的所有UI实例
    public List<T> GetAllUI<T>() where T : UIBase
    {
Main/System/NewBieGuidance/NewBieCenter.cs
@@ -30,12 +30,15 @@
    List<int> allGuides = new List<int>();
    public List<int> completeGuidesBuf = new List<int>();
    //因其他原因导致的等待显示的引导窗口,在OpenWindow时会触发复查,但时机太晚增加关闭界面时触发
    List<string> waitGuideWinNames = new List<string>();
    bool inited = false;
    public event Action guideStepChangeEvent;
    public event Action guideBeginEvent;
    public event Action<int> guideCompletedEvent;
    public override void Init()
    {
@@ -44,6 +47,7 @@
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
        UIManager.Instance.OnOpenWindow += OnOpenWindow;
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
    }
    public override void Release()
@@ -53,6 +57,7 @@
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
    }
    void OnOpenWindow(UIBase _ui)
@@ -61,6 +66,22 @@
        if (guides != null)
        {
            TryStartNewBieGuides(guides);
        }
    }
    //关闭其他界面时复查有没需要等待的引导
    void OnCloseWindow(UIBase _ui)
    {
        foreach (var winName in waitGuideWinNames)
        {
            var guides = GuideConfig.GetGuideListByWinName(winName);
            if (guides != null)
            {
                if (TryStartNewBieGuides(guides))
                {
                    break;
                }
            }
        }
    }
@@ -78,7 +99,7 @@
        var guides = GuideConfig.GetGuideListByType((int)GuideTriggerType.MissionClick);
        if (guides != null)
        {
            TryStartNewBieGuides(guides);
            TryStartNewBieGuides(guides, true);
        }
    }
@@ -142,7 +163,8 @@
    }
    //找出可进行的引导
    public void TryStartNewBieGuides(List<int> _guides)
    //isOrgTrigger 是否是原生触发,如点击的只能是原生触发,其他的都不能
    public bool TryStartNewBieGuides(List<int> _guides, bool isOrgTrigger = false)
    {
        if (!inited)
        {
@@ -157,15 +179,14 @@
        if (_guides == null)
        {
            return;
            return false;
        }
        if (currentGuide != 0)
        {
            return;
            return false;
        }
        var ok = false;
        for (int i = 0; i < _guides.Count; i++)
        {
            var guideId = _guides[i];
@@ -181,30 +202,54 @@
                continue;
            }
            ok = CheckGuideCondition(guideId);
            if (ok && currentGuide != guideId)
            if (currentGuide != guideId && CheckGuideCondition(guideId, isOrgTrigger))
            {
                StartNewBieGuide(guideId);
                break;
                return StartNewBieGuide(guideId);
            }
        }
        return false;
    }
    public void StartNewBieGuide(int _id)
    bool WaitGuide(int _id)
    {
        var config = GuideConfig.Get(_id);
        if (UIManager.Instance.ExistAnyFullScreenOrMaskWin(config.WinName))
        {
            if (!waitGuideWinNames.Contains(config.WinName))
            {
                waitGuideWinNames.Add(config.WinName);
            }
            return true;
        }
        return false;
    }
    public bool StartNewBieGuide(int _id)
    {
        if (_id == 0)
        {
            Debug.LogError("请检查引导id = 0 的情况");
            return;
            return false;
        }
        var config = GuideConfig.Get(_id);
        if (config == null)
        {
            Debug.LogError($"没有该引导ID,请检查引导id = {_id} 的情况");
            return;
            return false;
        }
        if (WaitGuide(_id))
        {
            return false;
        }
        if (waitGuideWinNames.Contains(config.WinName))
        {
            waitGuideWinNames.Remove(config.WinName);
        }
        AutoFightModel.Instance.isPause = true;
@@ -226,6 +271,7 @@
            guideStepChangeEvent?.Invoke();
        }
        UIManager.Instance.CloseWindow<ChatWin>();
        return true;
    }
@@ -333,8 +379,8 @@
    }
    public bool CheckGuideCondition(int _guideId)
    //isOrgTrigger 是否是原生触发,如点击的只能是原生触发,其他的都不能
    public bool CheckGuideCondition(int _guideId, bool isOrgTrigger)
    {
        var config = GuideConfig.Get(_guideId);
        if (config == null)
@@ -342,35 +388,42 @@
            return false;
        }
        if (!UIManager.Instance.IsOpened(config.WinName))
        {
        {
            return false;
        }
        switch ((GuideTriggerType)config.TriggerType)
            {
                case GuideTriggerType.None:
                    return true;
                case GuideTriggerType.FunctionOpen:
                    return FuncOpen.Instance.IsFuncOpen(config.Condition);
                case GuideTriggerType.Level:
                    return PlayerDatas.Instance.baseData.LV >= config.Condition;
                case GuideTriggerType.OpenWindow:
                    return UIManager.Instance.IsOpened(config.WinName);
                case GuideTriggerType.MainLineQuestCanDo:
                    if (config.SupplementCondition == 2)
                    {
                        return TaskManager.Instance.mainTask.TaskID == config.Condition && TaskManager.Instance.GetMainTaskState() == 2;
                    }
                    return TaskManager.Instance.mainTask.TaskID == config.Condition;
                case GuideTriggerType.Map:
                    return PlayerDatas.Instance.baseData.ExAttr1 >= config.Condition;
                case GuideTriggerType.MissionClick:
                    return TaskManager.Instance.GetMainTaskType() == config.Condition;
                default:
                    return false;
            }
        {
            case GuideTriggerType.None:
                return true;
            case GuideTriggerType.FunctionOpen:
                return FuncOpen.Instance.IsFuncOpen(config.Condition);
            case GuideTriggerType.Level:
                return PlayerDatas.Instance.baseData.LV >= config.Condition;
            case GuideTriggerType.OpenWindow:
                return UIManager.Instance.IsOpened(config.WinName);
            case GuideTriggerType.MainLineQuestCanDo:
                if (config.SupplementCondition == 2)
                {
                    return TaskManager.Instance.mainTask.TaskID == config.Condition && TaskManager.Instance.GetMainTaskState() == 2;
                }
                return TaskManager.Instance.mainTask.TaskID == config.Condition;
            case GuideTriggerType.Map:
                return PlayerDatas.Instance.baseData.ExAttr1 >= config.Condition;
            case GuideTriggerType.MissionClick:
                //只有真正点击才可以触发
                if (isOrgTrigger)
                {
                    return TaskManager.Instance.GetMainTaskType() == config.Condition && TaskManager.Instance.GetMainTaskState() != 2;
                }
                return false;
            default:
                return false;
        }
    }
    public void CompleteAllGuides()
    {
        var send = new CA222_tagCMSetGuideOK();
Main/System/NewBieGuidance/NewBieWin.cs
@@ -249,6 +249,10 @@
    {
        if (Input.GetMouseButtonUp(0))
        {
            if (stepConfig == null)
            {
                return;
            }
            if (stepConfig.clickAnyWhereComplete || m_NewBieMask.mask.IsInCirleArea(Input.mousePosition, CameraManager.uiCamera))
            {
                if (m_ClickTarget == null)