From cb018a575005f873135fab3201d1bf6d408e2b6a Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 18 九月 2025 14:50:31 +0800
Subject: [PATCH] 125 【战斗】战斗系统 技能表现修改

---
 Main/System/Battle/BattleConst.cs                       |    8 ++
 Main/System/Battle/BattleObject/BattleObject.cs         |    5 +
 Main/System/Battle/Skill/SkillBase.cs                   |   19 ++++++
 Main/System/Battle/Buff/BattleObjectBuffMgr.cs          |  106 +++++++++++++++++++++--------------
 Main/Component/UI/Effect/BattleEffectPlayer.cs          |    4 -
 Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs |    5 +
 6 files changed, 99 insertions(+), 48 deletions(-)

diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 703ed32..df7c822 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -36,8 +36,6 @@
     public float speedRate = 1.5f;
 
 
-
-
     [Header("鎾斁瀹屾瘯绔嬪嵆鍥炴敹")]
     public bool isReleaseImmediately = false;  //鐣岄潰鐗规晥涓�鑸笉闇�瑕佽嚜鎴戦攢姣侊紝璺熼殢鐣岄潰鎴栬�呯埗瀵硅薄閿�姣佸氨琛�
 
@@ -377,7 +375,7 @@
 
     public string sortingLayer;
     public int sortingOrder;
-    private RectTransform rectTrans;
+    public RectTransform rectTrans;
 
     protected void OnSortingChanged(string _sortingLayer, int _sortingOrder)
     {
diff --git a/Main/System/Battle/BattleConst.cs b/Main/System/Battle/BattleConst.cs
index 07c2e1c..18eb822 100644
--- a/Main/System/Battle/BattleConst.cs
+++ b/Main/System/Battle/BattleConst.cs
@@ -99,6 +99,14 @@
         }
     }
 
+    public static int ActiveHeroActionSortingOrder
+    {
+        get
+        {
+            return ActiveHeroSortingOrder + 1;
+        }
+    }
+
     // 婵�娲昏嫳闆勭殑鍚庣壒鏁�
     public static int ActiveHeroBackSortingOrder
     {
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index ecef462..c686fea 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -40,8 +40,6 @@
 
     public TeamHero teamHero { get; protected set; }
 
-    // public BuffMgr buffMgr;
-
     public MotionBase motionBase;
 
     public GameObject heroGo
@@ -111,6 +109,7 @@
     {
         motionBase.Run();
         heroInfoBar.Run();
+        buffMgr.Run();
     }
 
     public virtual void Pause()
@@ -331,6 +330,8 @@
     {
         //  鎴栬鐪嬬湅婧惰В鐗规晥锛� YYL TODO
         heroGo.SetActive(false);
+
+        buffMgr.RemoveAllBuff();
     }
 
     public void OnReborn(HB423_tagMCTurnFightObjReborn vNetData)
diff --git a/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
index 08a5bcf..51b4576 100644
--- a/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
@@ -61,6 +61,11 @@
 
     public void UpdateLayer()
     {
+        for (int i = 0; i < effectPlayers.Count; i++)
+        {
+            effectPlayers[i].SetActive(isFront);
+        }
+
         int order = isFront ? BattleConst.ActiveHeroSortingOrder : BattleConst.UnactiveHeroSortingOrder;
         SetSortingOrder(order);
     }
diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index 9704be3..fd1d6f5 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -6,11 +6,8 @@
 
 public class BattleObjectBuffMgr
 {
-    // buffId, effectId, EffectPlayer
-    private Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict = new Dictionary<uint, Dictionary<int, BattleEffectPlayer>>();
+    private Dictionary<int/*EffectId*/, KeyValuePair<BattleEffectPlayer, HashSet<uint/*BuffID*/>>> buffEffectDict = new Dictionary<int, KeyValuePair<BattleEffectPlayer, HashSet<uint>>>();
 
-
-    //  buffId, buffdata
     private Dictionary<uint, HB428_tagSCBuffRefresh> buffDataDict = new Dictionary<uint, HB428_tagSCBuffRefresh>();
 
     private BattleObject battleObject;
@@ -25,17 +22,31 @@
 
     }
 
-    //  澧炲姞buff
-    public void AddBuff(HB428_tagSCBuffRefresh vNetData)
+    public void Run()
     {
-        // BuffBase buffBase = BuffFactory.CreateBuff(vNetData, battleObject);
-        // if (null == buffBase)
-        // {
-        //     return;
-        // }
+        //  璺熼殢BattleObject
+        foreach (var kv in buffEffectDict)
+        {
+            // foreach (var kv2 in effectDict)
+            {
+                BattleEffectPlayer effectPlayer = kv.Value.Key;
+                effectPlayer.transform.position = battleObject.heroRectTrans.position;
+            }
+        }
+    }
 
-        // buffBase.OnAdd();
-        
+    public void RemoveAllBuff()
+    {
+        foreach (var kv in buffEffectDict)
+        {
+            KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair = kv.Value;
+            battleObject.battleField.battleEffectMgr.RemoveEffect(kv.Key, pair.Key);
+        }
+
+        buffEffectDict.Clear();
+        buffDataDict.Clear();
+
+        battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
     }
 
     //  鍒犻櫎buff
@@ -50,18 +61,24 @@
 
         if (buffData != null)
         {
-            Dictionary<int, BattleEffectPlayer> effectDict = null;
+            SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
 
-            if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
+            if (null == skillConfig || skillConfig.BuffEffect <= 0)
             {
-                SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
-                if (null != skillConfig)
+                return;
+            }
+
+            KeyValuePair<BattleEffectPlayer, HashSet<uint>> effectPair;
+
+            if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out effectPair))
+            {
+                effectPair.Value.Remove(vNetData.BuffID);
+
+                if (effectPair.Value.Count == 0)
                 {
-                    BattleEffectPlayer effectPlayer = null;
-                    if (effectDict.TryGetValue(skillConfig.EffectId, out effectPlayer))
-                    {
-                        battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.EffectId, effectPlayer);
-                    }
+                    //  娌℃湁杩欎釜buff浜�
+                    battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.BuffEffect, effectPair.Key);
+                    buffEffectDict.Remove(skillConfig.BuffEffect);
                 }
             }
         }
@@ -70,8 +87,17 @@
         battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
     }
 
+    //  鍒锋柊buff
     public void RefreshBuff(HB428_tagSCBuffRefresh vNetData)
     {
+        SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
+
+        if (null == skillConfig)
+        {
+            Debug.LogError("buff瀵瑰簲鐨勬妧鑳戒笉瀛樺湪锛宻killId : " + vNetData.SkillID);
+            return;
+        }
+
         bool isNew = false;
         if (buffDataDict.ContainsKey(vNetData.BuffID))
         {
@@ -86,35 +112,31 @@
         if (isNew)
         {
             BuffMountAction buffMountAction = new BuffMountAction(battleObject.battleField, battleObject, vNetData, () =>
-            { 
-                SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
-                if (null != skillConfig && skillConfig.EffectId > 0)
+            {
+                if (null != skillConfig && skillConfig.BuffEffect > 0)
                 {
-                    // Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict
-                    Dictionary<int, BattleEffectPlayer> effectDict = null;
-                    if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
+                    //  宸茬粡瀛樺湪鐩稿悓鐨刡uff鐗规晥
+                    if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair))
                     {
-                        //  瀛樺湪杩欎釜buffid鐨勭壒鏁堝瓧鍏�
-                        if (effectDict.ContainsKey(skillConfig.EffectId))
-                        {
-                            Debug.LogError("宸插瓨鍦ㄥ悓鏍风殑buff鐗规晥 " + skillConfig.EffectId);
-                        }
-                        else
-                        {
-                            BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
-                            effectDict.Add(skillConfig.EffectId, effect);
-                        }
+                        pair.Value.Add(vNetData.BuffID);
                     }
                     else
                     {
-                        effectDict = new Dictionary<int, BattleEffectPlayer>();
-                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
-                        effectDict.Add(skillConfig.EffectId, effect);
-                        buffEffectDict.Add(vNetData.BuffID, effectDict);
+                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.BuffEffect, battleObject.heroRectTrans, battleObject.Camp);
+                        HashSet<uint> buffIdSet = new HashSet<uint>();
+                        buffIdSet.Add(vNetData.BuffID);
+                        buffEffectDict.Add(skillConfig.BuffEffect, new KeyValuePair<BattleEffectPlayer, HashSet<uint>>(effect, buffIdSet));
                     }
                 }
+                battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
             });
             battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
         }
+        else
+        {
+            //  宸茬粡瀛樺湪鐨刡uff 鍒锋柊
+            battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
+        }
     }
+
 }
\ No newline at end of file
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 049ac80..09f6301 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -376,10 +376,13 @@
 			return;
 
 		// 楂樹寒鎵�鏈夌洰鏍�
-		List<BattleObject> highlightList = battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack);
+		List<BattleObject> targetList = battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack);
+		List<BattleObject> highlightList = new List<BattleObject>(targetList);
 		highlightList.Add(caster);
 
 		List<BattleObject> allList = battleField.battleObjMgr.allBattleObjDict.Values.ToList<BattleObject>();
+
+		caster.heroInfoBar.SetActive(false);
 
 		for (int i = 0; i < allList.Count; i++)
 		{
@@ -387,6 +390,7 @@
 			if (highlightList.Contains(bo))
 			{
 				bo.layerMgr.SetFront();
+				bo.heroInfoBar.SetActive(true);
 				bo.heroRectTrans.SetParent(battleField.battleRootNode.skillFrontNode, true);
 			}
 			else
@@ -394,7 +398,18 @@
 				bo.layerMgr.SetBack();
 				bo.heroRectTrans.SetParent(battleField.battleRootNode.skillBackNode, true);
 			}
+
+			if (targetList.Contains(bo))
+			{
+				bo.heroInfoBar.SetActive(true);
+			}
+			else
+			{
+				bo.heroInfoBar.SetActive(false);
+			}
 		}
+
+		caster.layerMgr.SetSortingOrder(BattleConst.ActiveHeroActionSortingOrder);
 
 		battleField.battleRootNode.skillMaskNode.SetActive(true);
 
@@ -635,9 +650,11 @@
 				BattleObject bo = allList[i];
 				bo.layerMgr.SetFront();
 				bo.heroRectTrans.SetParent(battleField.GetTeamNode(bo.Camp, bo.teamHero.positionNum), true);
+				bo.heroInfoBar.SetActive(true);
 			}
 			battleField.battleRootNode.skillMaskNode.SetActive(false);
 
+			
 
 
 			return true;

--
Gitblit v1.8.0