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