From a731fcb2b786b32dd7f0c0e184f7ba58ff44df3f Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 11 十月 2025 14:30:15 +0800
Subject: [PATCH] 0312 优化引导逻辑-存在其他遮罩界面时等待引导

---
 Main/Manager/UIManager.cs                         |   28 ++++++++
 Main/System/NewBieGuidance/NewBieCenter.cs        |  129 ++++++++++++++++++++++++++++++------------
 Main/Component/UI/Common/PopupWindowsProcessor.cs |    4 +
 Main/System/NewBieGuidance/NewBieWin.cs           |    4 +
 4 files changed, 125 insertions(+), 40 deletions(-)

diff --git a/Main/Component/UI/Common/PopupWindowsProcessor.cs b/Main/Component/UI/Common/PopupWindowsProcessor.cs
index 480b430..413d3be 100644
--- a/Main/Component/UI/Common/PopupWindowsProcessor.cs
+++ b/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)
         {
             //鍒ゆ柇涓婁竴涓帹閫佹槸鍚﹀叧闂�
diff --git a/Main/Manager/UIManager.cs b/Main/Manager/UIManager.cs
index b5e58a4..7fab3ba 100644
--- a/Main/Manager/UIManager.cs
+++ b/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;
     }
     
+    // 妫�鏌ユ槸鍚﹀瓨鍦ㄤ换浣曞叏灞忔垨閬僵绐楀彛, 鏆傛湭瀹氫箟鍏ㄥ睆鍙互缁熶竴鍕鹃�塷penMask
+    public bool ExistAnyFullScreenOrMaskWin(string excludeUIName)
+    {
+        var exist = false;
+        foreach (var uiList in uiDict.Values)
+        {
+            // 閬嶅巻璇ョ被鍨嬬殑鎵�鏈塙I瀹炰緥
+            foreach (var ui in uiList)
+            {
+                // 鍒锋柊UI
+                if (ui.IsActive() && ui.name != excludeUIName)
+                {
+                    if (ui.openMask)
+                    {
+                        exist = true;
+                        break;
+                    }
+                }
+            }
+        }
+
+        return exist;
+    }
+    
     // 鑾峰彇鎸囧畾绫诲瀷鐨勬墍鏈塙I瀹炰緥
     public List<T> GetAllUI<T>() where T : UIBase
     {
diff --git a/Main/System/NewBieGuidance/NewBieCenter.cs b/Main/System/NewBieGuidance/NewBieCenter.cs
index e511093..ac29f3b 100644
--- a/Main/System/NewBieGuidance/NewBieCenter.cs
+++ b/Main/System/NewBieGuidance/NewBieCenter.cs
@@ -30,12 +30,15 @@
     List<int> allGuides = new List<int>();
     public List<int> completeGuidesBuf = new List<int>();
 
+    //鍥犲叾浠栧師鍥犲鑷寸殑绛夊緟鏄剧ず鐨勫紩瀵肩獥鍙o紝鍦∣penWindow鏃朵細瑙﹀彂澶嶆煡锛屼絾鏃舵満澶櫄澧炲姞鍏抽棴鐣岄潰鏃惰Е鍙�
+    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("璇锋鏌ュ紩瀵糹d = 0 鐨勬儏鍐�");
-            return;
+            return false;
         }
 
         var config = GuideConfig.Get(_id);
         if (config == null)
         {
             Debug.LogError($"娌℃湁璇ュ紩瀵糏D锛岃妫�鏌ュ紩瀵糹d = {_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();
diff --git a/Main/System/NewBieGuidance/NewBieWin.cs b/Main/System/NewBieGuidance/NewBieWin.cs
index 19c9656..8f1533b 100644
--- a/Main/System/NewBieGuidance/NewBieWin.cs
+++ b/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)

--
Gitblit v1.8.0