From 73230b277cda84d306030d1f8db2ad37e9016c5f Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 22 十月 2025 11:25:31 +0800
Subject: [PATCH] 125 战斗 伤害震动 BUFF图标问题

---
 Main/System/Battle/StoryBossBattleWin.cs          |   31 +++++++++++++++
 Main/System/Battle/UIComp/TotalDamageDisplayer.cs |   27 ++++++++++++-
 Main/System/Battle/BattleObject/BattleObject.cs   |    2 +
 Main/System/Battle/Buff/BattleObjectBuffMgr.cs    |    9 ++++
 4 files changed, 66 insertions(+), 3 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 89714c3..3c0bb25 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -127,6 +127,8 @@
 
         motionBase.Release();
         motionBase = null;
+        buffMgr.Release();
+        buffMgr = null;
         teamHero = null;
         ObjID = 0;
 
diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index a3225a6..9a5c157 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -7,6 +7,9 @@
 
 public class BattleObjectBuffMgr
 {
+
+    public Action onBuffChanged;
+
     private Dictionary<int/*EffectId*/, KeyValuePair<BattleEffectPlayer, HashSet<uint/*BuffID*/>>> buffEffectDict = new Dictionary<int, KeyValuePair<BattleEffectPlayer, HashSet<uint>>>();
 
     private Dictionary<uint, HB428_tagSCBuffRefresh> buffDataDict = new Dictionary<uint, HB428_tagSCBuffRefresh>();
@@ -20,7 +23,7 @@
 
     public void Release()
     {
-
+        onBuffChanged = null;
     }
 
     public void Run()
@@ -67,6 +70,7 @@
         buffDataDict.Clear();
 
         battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
+        onBuffChanged?.Invoke();
     }
 
     //  鍒犻櫎buff
@@ -105,6 +109,7 @@
 
         //  涓嶅仛琛ㄧ幇
         battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
+        onBuffChanged?.Invoke();
     }
 
     //  鍒锋柊buff
@@ -161,6 +166,7 @@
                     }
                 }
                 battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
+                onBuffChanged?.Invoke();
             });
             if (insert)
             {
@@ -175,6 +181,7 @@
         {
             //  宸茬粡瀛樺湪鐨刡uff 鍒锋柊
             battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
+            onBuffChanged?.Invoke();
         }
     }
     
diff --git a/Main/System/Battle/StoryBossBattleWin.cs b/Main/System/Battle/StoryBossBattleWin.cs
index 6e54f4b..1761f06 100644
--- a/Main/System/Battle/StoryBossBattleWin.cs
+++ b/Main/System/Battle/StoryBossBattleWin.cs
@@ -106,6 +106,12 @@
 
         if (!UIManager.Instance.IsOpened<MainWin>())
             UIManager.Instance.OpenWindow<MainWin>();
+
+        if (null != bossBattleObject)
+        {
+            bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
+            bossBattleObject = null;
+        }
     }
 
     private void OnCreateBattleField(string arg1, BattleField field)
@@ -131,6 +137,12 @@
 
         NPCLineupConfig lineupConfig = battleField.GetBossLineupConfig();
 
+        if (null != bossBattleObject)
+        {
+            bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
+            bossBattleObject = null;
+        }
+
         bossBattleObject = battleField.FindBoss();
 
         DisplaySkillWordsList(lineupConfig);
@@ -142,6 +154,8 @@
             txtBossName.text = teamHero.name;
             NPCConfig npcConfig = NPCConfig.Get(teamHero.NPCID);
             bossLifeBar.SetBaseInfo(Mathf.Max(1, npcConfig.LifeBarCount), (ulong)teamHero.curHp, (ulong)teamHero.maxHp);
+            bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
+            bossBattleObject.buffMgr.onBuffChanged += OnBuffChanged;
         }
         else
         {
@@ -152,6 +166,20 @@
         }
 
         txtBattleRound.text = string.Format("{0}/{1}", battleField.round, battleField.turnMax);
+
+        OnBuffChanged();
+
+        totalDamageDisplayer.SetActive(false);
+    }
+
+    private void OnBuffChanged()
+    {
+        var buffList = new List<HB428_tagSCBuffRefresh>();
+        if (null != bossBattleObject)
+        {
+            buffList = bossBattleObject.buffMgr.GetBuffList();
+        }
+        RefreshBuff(buffList);
     }
 
     private void RefreshHP()
@@ -166,6 +194,9 @@
 
     private void OnDamageTaken(BattleDmgInfo info)
     {
+        if (info.battleFieldGuid != battleField.guid)
+            return;
+
         if (info.hurtObj.ObjID == bossBattleObject.ObjID)
         {
             // Update the boss's health bar
diff --git a/Main/System/Battle/UIComp/TotalDamageDisplayer.cs b/Main/System/Battle/UIComp/TotalDamageDisplayer.cs
index 1ed0fe3..6ddafbc 100644
--- a/Main/System/Battle/UIComp/TotalDamageDisplayer.cs
+++ b/Main/System/Battle/UIComp/TotalDamageDisplayer.cs
@@ -1,8 +1,8 @@
 using System.Collections;
 using Cysharp.Threading.Tasks;
+using DG.Tweening;
 using UnityEngine;
 using UnityEngine.UI;
-using System.Threading;
 
 public class TotalDamageDisplayer : MonoBehaviour
 {
@@ -14,6 +14,10 @@
 
     private Coroutine hideCoroutine;
     private int hideVersion = 0;
+
+    private long damage = 0;
+
+    private long heal = 0;
 
     public void SetDamage(BattleDmgInfo dmgInfo)
     {
@@ -29,11 +33,28 @@
         if (dmgInfo.IsType(DamageType.Recovery))
         {
             // 淇濇寔鍘熸湁澶勭悊閫昏緫浣嶇疆
+            foreach (var h in dmgInfo.damageList)
+            {
+                heal += h;
+            }
+            textDamage.text = BattleUtility.DisplayDamageNum(heal, BattleConst.BattleTotalRecoverType);
+            textTotalDesc.text = "鎬绘不鐤�";
         }
         else if (dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsType(DamageType.Realdamage))
         {
             // 淇濇寔鍘熸湁澶勭悊閫昏緫浣嶇疆
+            foreach (var d in dmgInfo.damageList)
+            {
+                damage += d;
+            }
+            textDamage.text = BattleUtility.DisplayDamageNum(damage, BattleConst.BattleTotalDamageType);
+            textTotalDesc.text = "鎬讳激瀹�";
         }
+
+        textDamage.transform.DOPunchScale(Vector3.one * 0.2f, 0.2f, 1).OnComplete(() =>
+        {
+            textDamage.transform.localScale = Vector3.one;
+        });
 
         if (dmgInfo.isLastHit)
         {
@@ -41,10 +62,12 @@
             hideVersion++;
             int myVersion = hideVersion;
 
+            damage = 0;
+            heal = 0;
 
             var battleField = BattleManager.Instance.GetBattleField(dmgInfo.battleFieldGuid);
 
-            float ms = 1000f / battleField.speedRatio;
+            float ms = 500f / battleField.speedRatio;
 
             hideCoroutine = StartCoroutine(HideAfterDelayCoroutine(ms, myVersion));
 

--
Gitblit v1.8.0