From ceabc7dde8514ed6bcfadfb5fe9fb37c45cc370e Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 22 一月 2026 20:43:06 +0800
Subject: [PATCH] 136 白骨盈野-客户端  重构红点逻辑

---
 Main/System/BoneField/BoneFieldManager.cs |   75 ++++++++++++++++++++++++++++---------
 1 files changed, 56 insertions(+), 19 deletions(-)

diff --git a/Main/System/BoneField/BoneFieldManager.cs b/Main/System/BoneField/BoneFieldManager.cs
index e915b7b..bfc1f3a 100644
--- a/Main/System/BoneField/BoneFieldManager.cs
+++ b/Main/System/BoneField/BoneFieldManager.cs
@@ -5,13 +5,13 @@
 
     public readonly int DataMapID = 30010;  // 鐧介鐩堥噹(鎴橀敜绉樺)
     public readonly int MinStartLineID = 1;    // funcLineID浠�1寮�濮�
-    public readonly int funcId = 9;  //鍔熻兘ID 
     public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.BoneFieldRepoint);
     public override void Init()
     {
         DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
         AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
         FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
         TimeMgr.Instance.OnDayEvent += OnDayEvent;
     }
 
@@ -20,12 +20,13 @@
         DungeonManager.Instance.UpdateFBInfoListEvent -= OnUpdateFBInfoChangeEvent;
         AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
         FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
         TimeMgr.Instance.OnDayEvent -= OnDayEvent;
     }
 
     private void OnFuncStateChangeEvent(int obj)
     {
-        if (obj != funcId)
+        if (obj != (int)FuncOpenEnum.BoneBattle)
             return;
         UpdateRedPoint();
     }
@@ -51,39 +52,75 @@
         UpdateRedPoint();
     }
 
+    private void OnPlayerDataRefresh(PlayerDataType type)
+    {
+        if (type == PlayerDataType.FightPower)
+        {
+            UpdateRedPoint();
+        }
+        else if (type == PlayerDataType.LV)
+        {
+            UpdateRedPoint();
+        }
+    }
+
     public void UpdateRedPoint()
     {
         parentRedpoint.state = RedPointState.None;
-        if (!FuncOpen.Instance.IsFuncOpen(funcId))
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BoneBattle))
             return;
+
+        bool isShowChallengeRed = IsShowChallengeRed();
+        if (isShowChallengeRed)
+        {
+            parentRedpoint.state = RedPointState.Simple;
+            return;
+        }
+
+        bool isShowSweepRed = IsShowSweepRed();
+        if (isShowSweepRed)
+        {
+            parentRedpoint.state = RedPointState.Simple;
+            return;
+        }
+
+    }
+    public bool IsShowChallengeRed()
+    {
         if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
-            return;
+            return false;
         bool isHasNextLineID = IsHasNextLineID(fbInfo);
         int nowPassLineID = GetNowPassLineID(fbInfo);
         DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID);
         if (!DungeonConfig.HasKey(dungeonID))
-            return;
+            return false;
         DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID);
         bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin;
         long myFightPower = PlayerDatas.Instance.baseData.FightPower;
-        if (myFightPower >= dungeonConfig.FightPower)
+        return isLvOk && isHasNextLineID && myFightPower >= dungeonConfig.FightPower;
+    }
+
+    public bool IsShowSweepRed()
+    {
+        bool isNoChallenge = IsNoChallenge();
+        if (isNoChallenge)
+            return false;
+        if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
         {
-            if (isLvOk && isHasNextLineID)
+            bool isSweepCountOk = showrealRemainSweepCount > 0;
+            if (isSweepCountOk)
             {
-                parentRedpoint.state = RedPointState.Simple;
+                return true;
             }
         }
-        else
-        {
-            if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
-            {
-                bool isSweepCountOk = showrealRemainSweepCount > 0;
-                if (isSweepCountOk)
-                {
-                    parentRedpoint.state = RedPointState.Simple;
-                }
-            }
-        }
+        return false;
+    }
+
+    public bool IsNoChallenge()
+    {
+        if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
+            return true;
+        return fbInfo.PassLineID <= 0;
     }
 
     public bool IsHasNextLineID(FBInfo fBInfo)

--
Gitblit v1.8.0