From 39001a600fcae2bcf27c225df8752d75fb92fef4 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 31 十月 2025 11:18:26 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/System/Battle/BattleEffectMgr.cs |  128 ++++++++++++++++++++++++++++++++++++++----
 1 files changed, 114 insertions(+), 14 deletions(-)

diff --git a/Main/System/Battle/BattleEffectMgr.cs b/Main/System/Battle/BattleEffectMgr.cs
index 494d4d9..d6b4a5a 100644
--- a/Main/System/Battle/BattleEffectMgr.cs
+++ b/Main/System/Battle/BattleEffectMgr.cs
@@ -1,23 +1,44 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using UnityEngine;
 
 public class BattleEffectMgr : MonoBehaviour
 {
     private BattleField battleField;
 
-    private Dictionary<int, List<EffectPlayer>> effectDict = new Dictionary<int, List<EffectPlayer>>();
+    private Dictionary<int, List<BattleEffectPlayer>> effectDict = new Dictionary<int, List<BattleEffectPlayer>>();
 
     public void Init(BattleField _battleField)
     {
+        Release();
         battleField = _battleField;
+    }
+
+    public void Run()
+    {
+        List<BattleEffectPlayer> runList = new List<BattleEffectPlayer>();
+
+        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
+        {
+            runList.AddRange(kvPair.Value);
+        }
+
+        for (int i = runList.Count - 1; i >= 0; i--)
+        {
+            BattleEffectPlayer effectPlayer = runList[i];
+            if (effectPlayer != null)
+            {
+                effectPlayer.Run();
+            }
+        }
     }
 
     public void PauseGame()
     {
-        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict)
+        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
         {
-            foreach (EffectPlayer effectPlayer in kvPair.Value)
+            foreach (BattleEffectPlayer effectPlayer in kvPair.Value)
             {
                 if (effectPlayer != null)
                 {
@@ -29,9 +50,9 @@
 
     public void ResumeGame()
     {
-        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict)
+        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
         {
-            foreach (EffectPlayer effectPlayer in kvPair.Value)
+            foreach (BattleEffectPlayer effectPlayer in kvPair.Value)
             {
                 if (effectPlayer != null)
                 {
@@ -41,26 +62,65 @@
         }
     }
 
-    public EffectPlayer PlayEffect(int ObjID, int effectId, Transform parent)
+    public BattleEffectPlayer PlayEffect(BattleObject layerDepender, int effectId, Transform parent, BattleCamp camp)
     {
-        if (!effectDict.ContainsKey(effectId))
+        if (effectId <= 0)
         {
-            effectDict[effectId] = new List<EffectPlayer>();
+            Debug.LogError("effect id <= 0");
+            return null;
         }
 
-        EffectPlayer effectPlayer = EffectPlayer.Create(effectId, parent, true, false);
-        effectPlayer.onDestroy = OnEffectDestroy;
+        var effectCfg = EffectConfig.Get(effectId);
+        if (null == effectCfg)
+        {
+            Debug.LogError("effect config is null, effectId : " + effectId);
+            return null;
+        }
+
+        if (!effectDict.ContainsKey(effectId))
+        {
+            effectDict[effectId] = new List<BattleEffectPlayer>();
+        }
+
+        bool isRedCamp = camp == BattleCamp.Red;
+
+        BattleEffectPlayer effectPlayer = BattleEffectPlayer.Create(effectId, battleField.battleRootNode.transform, isRedCamp);
+        // 璁剧疆鐗规晥缂╂斁鍜屾柟鍚�
+
+        effectPlayer.transform.position = parent.position;
+        
+
+        BattleObject temp = layerDepender;
+        effectPlayer.onDestroy += (efPlayer) =>
+        {
+            OnEffectDestroy(efPlayer);
+            temp.layerMgr.RemoveEffect(efPlayer);
+        };
+
         if (effectPlayer != null)
         {
             effectDict[effectId].Add(effectPlayer);
-            effectPlayer.Play();
         }
+        effectPlayer.SetSpeedRatio(battleField.speedRatio);
+
+        effectPlayer.Play(true);
+
+        
+        var effectScale = effectPlayer.transform.localScale;
+        effectScale.x *= isRedCamp ? 1 : -1;
+        effectPlayer.transform.localScale = effectScale;
+
+        if (null != layerDepender)
+        {
+            layerDepender.layerMgr.AddEffect(effectPlayer);
+        }
+
         return effectPlayer;
     }
 
-    public void RemoveEffect(int effectId, EffectPlayer effectPlayer)
+    public void RemoveEffect(int effectId, BattleEffectPlayer effectPlayer)
     {
-        List<EffectPlayer> effectPlayers = null;
+        List<BattleEffectPlayer> effectPlayers = null;
 
         if (effectDict.TryGetValue(effectId, out effectPlayers))
         {
@@ -74,7 +134,7 @@
         }
     }
 
-    protected void OnEffectDestroy(EffectPlayer effectPlayer)
+    protected void OnEffectDestroy(BattleEffectPlayer effectPlayer)
     {
         if (effectDict.ContainsKey(effectPlayer.effectId))
         {
@@ -85,4 +145,44 @@
             }
         }
     }
+
+    public void HaveRest()
+    {
+        Release();
+    }
+
+    public void Release()
+    {
+        List<int> fKeys = effectDict.Keys.ToList();
+
+        for (int i = 0; i < fKeys.Count; i++)
+        {
+            List<BattleEffectPlayer> effectPlayers = effectDict[fKeys[i]];
+            while (effectPlayers.Count > 0)
+            {
+                var effectPlayer = effectPlayers[0];
+                if (effectPlayer != null)
+                {
+                    GameObject.DestroyImmediate(effectPlayer.gameObject);
+                }
+                else
+                {
+                    effectPlayers.RemoveAt(0);
+                }
+            }
+        }
+
+        effectDict.Clear();
+    }
+
+    public void SetSpeedRatio(float ratio)
+    {
+        foreach (var kvPair in effectDict)
+        {
+            foreach (var effectPlayer in kvPair.Value)
+            {
+                effectPlayer.SetSpeedRatio(ratio);
+            }
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0