From ca577b96e0022e0ddaa8e106e147e53d8166df1c Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期五, 07 十一月 2025 11:40:36 +0800
Subject: [PATCH] 164 天子的考验-客户端

---
 Main/System/TianziBillborad/TianziBillboradManager.cs |   95 +++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 82 insertions(+), 13 deletions(-)

diff --git a/Main/System/TianziBillborad/TianziBillboradManager.cs b/Main/System/TianziBillborad/TianziBillboradManager.cs
index c77a3c9..8faa068 100644
--- a/Main/System/TianziBillborad/TianziBillboradManager.cs
+++ b/Main/System/TianziBillborad/TianziBillboradManager.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using LitJson;
+using UnityEngine;
 public class TianziBillboradManager : GameSystemManager<TianziBillboradManager>
 {
     public readonly int rankType = 2;    // 姒滃崟绫诲瀷
@@ -12,16 +13,13 @@
     public ulong historyHurt;    //鏈�冮獙鍘嗗彶鏈�澶т激瀹�
     public ulong todayHurt;    //鏈�冮獙浠婃棩鏈�澶т激瀹�
     public bool isSkipSweepTip = false;
-
-    public ulong loaclNowHunt = 0;
-    public ulong loaclAllHunt = 0;
-    public ulong loaclMaxHp = 0;
-    public int loaclHpNum = 0;
     public event Action UpdateTianziKYInfoExent;
     public Dictionary<int, int[][]> rankAwards;// 姣忔棩鎺掕濂栧姳 {"鍚嶆":[[鐗╁搧ID, 涓暟,鏄惁鎷嶅搧], ...], ...} 閰嶇疆鐨勫悕娆ey锛岃嚜鍔ㄦ寜灏忎簬绛変簬瀵瑰簲鍚嶆缁欏鍔�
     public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.TianziBillboradRepoint);
     public override void Init()
     {
+        EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
+        EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnSettlement);
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
         DungeonManager.Instance.UpdateFBInfoChangeEvent += OnUpdateFBInfoChangeEvent;
         AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
@@ -35,20 +33,14 @@
 
     public override void Release()
     {
+        EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
+        EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnSettlement);
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
         DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent;
         AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
         FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
         TimeMgr.Instance.OnDayEvent -= OnDayEvent;
         UpdateTianziKYInfoExent -= OnUpdateTianziKYInfoExent;
-    }
-
-    public void ClearBar()
-    {
-        loaclNowHunt = 0;
-        loaclAllHunt = 0;
-        loaclMaxHp = 0;
-        loaclHpNum = 0;
     }
 
     private void OnBeforePlayerDataInitializeEvent()
@@ -61,6 +53,83 @@
         isSkipSweepTip = false;
     }
 
+    public int battleLineID; //姝e湪鎴樻枟涓殑LineID
+    public ulong loaclNowHunt = 0;
+    public ulong loaclAllHunt = 0;
+    public ulong loaclMaxHp = 0;
+    public int loaclHpNum = 0;
+    public event Action<ulong, ulong, int> OnUpdateBarInfoEvent;
+
+    private void OnDamageTaken(BattleDmgInfo info)
+    {
+        BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(DataMapID);
+        if (info == null || battleField == null || battleField.guid != info.battleFieldGuid)
+            return;
+        BattleObject boss = battleField.FindBoss();
+        if (boss == null || boss.ObjID != info.hurtObj.ObjID)
+            return;
+        ShowBar(info);
+    }
+
+    public void ShowBar(BattleDmgInfo info)
+    {
+        if (info == null)
+            return;
+        //闂伩鍜屽洖琛�绫讳笉绠椾激瀹�
+        if (info.IsType(DamageType.Dodge) || info.IsType(DamageType.Recovery))
+            return;
+        var damages = info.damageList;
+        for (int i = 0; i < damages.Count; i++)
+        {
+            ulong hunt = (ulong)damages[i];
+            loaclAllHunt += hunt;
+            if (!TryGetBossConfig(DataMapID, battleLineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig))
+                return;
+            int bossId = npcConfig.NPCID;
+            if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, loaclAllHunt, out TianziConfig tianziConfig))
+                return;
+            loaclMaxHp = (ulong)tianziConfig.MaxHP;
+            loaclHpNum = tianziConfig.HPNum;
+            loaclNowHunt = TianziConfig.GetCurrentHPDamage(bossId, loaclAllHunt);
+            OnUpdateBarInfoEvent?.Invoke(loaclNowHunt, loaclMaxHp, loaclHpNum);
+            Debug.Log($"TianziDamageBar hunt {hunt} loaclAllHunt {loaclNowHunt} loaclMaxHp {loaclMaxHp} loaclHpNum {loaclHpNum} 鏃堕棿: {DateTime.Now:HH:mm:ss}");
+        }
+    }
+
+    public void ClearBar()
+    {
+        battleLineID = 0;
+        loaclNowHunt = 0;
+        loaclAllHunt = 0;
+        loaclMaxHp = 0;
+        loaclHpNum = 0;
+    }
+    private void OnSettlement(string _guid, JsonData data)
+    {
+        if (string.Empty == _guid)
+            return;
+        var battle = BattleManager.Instance.GetBattleField(_guid);
+        if (battle == null)
+            return;
+        var battleName = battle.ToString();
+        if (battleName != "TianziBillboradBattleField")
+            return;
+        if (data == null || !data.ContainsKey("totalHurt"))
+            return;
+        ulong totalHurt = ulong.Parse(data["totalHurt"].ToString());
+        if (!TryGetBossConfig(DataMapID, battleLineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig))
+            return;
+        int bossId = npcConfig.NPCID;
+        if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, totalHurt, out TianziConfig tianziConfig))
+            return;
+        ulong endNowHunt = TianziConfig.GetCurrentHPDamage(bossId, totalHurt);
+        ulong endMaxHp = (ulong)tianziConfig.MaxHP;
+        int endHpNum = tianziConfig.HPNum;
+        OnUpdateBarInfoEvent?.Invoke(endNowHunt, endMaxHp, endHpNum);
+        Debug.Log($"TianziDamageBar end nowHpNum {endHpNum} nowHunt {endNowHunt} nowHpMax{endMaxHp} 鏃堕棿: {DateTime.Now:HH:mm:ss}");
+    }
+
+
     private void OnUpdateTianziKYInfoExent()
     {
         UpdateRedPoint();

--
Gitblit v1.8.0