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/BattleObject/BattleObjMgr.cs |  172 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 142 insertions(+), 30 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObjMgr.cs b/Main/System/Battle/BattleObject/BattleObjMgr.cs
index ec938e1..446cc62 100644
--- a/Main/System/Battle/BattleObject/BattleObjMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjMgr.cs
@@ -12,39 +12,118 @@
     private Dictionary<int, BattleObject> redCampDict = new Dictionary<int, BattleObject>();
     private Dictionary<int, BattleObject> blueCampDict = new Dictionary<int, BattleObject>();
 
-    protected Dictionary<int, BattleObject> allBattleObjDict = new Dictionary<int, BattleObject>();
+    public Dictionary<int, BattleObject> allBattleObjDict = new Dictionary<int, BattleObject>();
 
     protected BattleField battleField;
 
     public void Init(BattleField _battleField, TeamBase _redTeam, TeamBase _blueTeam)
     {
+        Release();
         battleField = _battleField;
-        CreateTeam(battleField.battleRootNode.redTeamNodeList, redCampDict, _redTeam, BattleCamp.Red);
-        CreateTeam(battleField.battleRootNode.blueTeamNodeList, blueCampDict, _blueTeam, BattleCamp.Blue);
-    } 
+        ReloadTeam(_redTeam, BattleCamp.Red);
+        ReloadTeam(_blueTeam, BattleCamp.Blue, false);
+    }
 
-    protected void CreateTeam(List<GameObject> posNodeList, Dictionary<int, BattleObject> campDict, TeamBase teamBase, BattleCamp _Camp)
+    public void ReloadTeam(TeamBase teamBase, BattleCamp _camp, bool active = true)
+    {
+        var posNodeList = _camp == BattleCamp.Red ? battleField.battleRootNode.redTeamNodeList : battleField.battleRootNode.blueTeamNodeList;
+        var campDict = _camp == BattleCamp.Red ? redCampDict : blueCampDict;
+        CreateTeam(posNodeList, campDict, teamBase, _camp, active);
+    }
+
+    protected void CreateTeam(List<GameObject> posNodeList, Dictionary<int, BattleObject> campDict, TeamBase teamBase, BattleCamp _Camp, bool active)
     {
         DestroyTeam(campDict);
-        for (int i = 0; i < teamBase.teamHeros.Length; i++)
+        if (teamBase == null)
         {
-            TeamHero teamHero = teamBase.teamHeros[i];
+            return;
+        }
+
+
+        for (int i = 0; i < teamBase.serverHeroes.Length; i++)
+        {
+            TeamHero teamHero = teamBase.serverHeroes[i];
             if (teamHero != null)
             {
                 BattleObject battleObj = BattleObjectFactory.CreateBattleObject(battleField, posNodeList, teamHero, _Camp);
-                allBattleObjDict.Add(battleObj.BattleObjectId, battleObj);
-                campDict.Add(teamHero.heroIndex, battleObj);
+                battleObj.heroGo.SetActive(active);
+                allBattleObjDict.Add(battleObj.ObjID, battleObj);
+                campDict.Add(teamHero.positionNum, battleObj);
+                battleObj.SetSpeedRatio(battleField.speedRatio);
             }
         }
     }
     
-    public BattleObject GetBattleObject(int battleObjId)
+    public BattleObject GetBattleObject(int objId)
     {
-        if (allBattleObjDict.TryGetValue(battleObjId, out BattleObject battleObj))
+        if (allBattleObjDict.TryGetValue(objId, out BattleObject battleObj))
         {
             return battleObj;
         }
         return null;
+    }
+
+    public List<BattleObject> GetBattleObjList(BattleCamp _Camp)
+    {
+        if (_Camp == BattleCamp.Red)
+        {
+            return redCampList;
+        }
+        else
+        {
+            return blueCampList;
+        }
+    }
+
+    public List<BattleObject> GetBattleObjList(HB427_tagSCUseSkill tagUseSkillAttack)
+    {
+        List<BattleObject> retList = new List<BattleObject>();
+        foreach (var hurt in tagUseSkillAttack.HurtList)
+        {
+            BattleObject obj = GetBattleObject((int)hurt.ObjID);
+            if (null != obj)
+            {
+                retList.Add(obj);
+            }
+        }
+
+        return retList;
+    }
+
+    public void DestroyTeam(BattleCamp battleCamp)
+    {
+        Dictionary<int, BattleObject> campDict = battleCamp == BattleCamp.Red ? redCampDict : blueCampDict;
+        if (campDict == null)
+        {
+            return;
+        }
+
+        DestroyTeam(campDict);
+    }
+
+    public void DestroyObjIds(uint[] objIDs)
+    {
+        if (objIDs == null || objIDs.Length == 0)
+        {
+            return;
+        }
+
+        foreach (var objID in objIDs)
+        {
+            if (allBattleObjDict.TryGetValue((int)objID, out BattleObject battleObj))
+            {
+                if (battleObj.Camp == BattleCamp.Red)
+                {
+                    redCampDict.Remove(battleObj.teamHero.positionNum);
+                }
+                else
+                {
+                    blueCampDict.Remove(battleObj.teamHero.positionNum);
+                }
+                allBattleObjDict.Remove((int)objID);
+                BattleObjectFactory.DestroyBattleObject((int)objID, battleObj);
+            }
+        }
     }
 
     protected void DestroyTeam(Dictionary<int, BattleObject> campDict)
@@ -52,20 +131,41 @@
         foreach (var item in campDict)
         {
             BattleObject battleObj = item.Value;
+            var positionNum = item.Key;
             if (battleObj != null)
             {
-                allBattleObjDict.Remove(battleObj.BattleObjectId);
-                BattleObjectFactory.DestroyBattleObject(item.Key, battleObj);
+                allBattleObjDict.Remove(battleObj.ObjID);
+                BattleObjectFactory.DestroyBattleObject(battleObj.ObjID, battleObj);
             }
         }
         campDict.Clear();
-
     }
 
-    public void Release()
+    //  绌洪棽鐘舵��
+    public virtual void HaveRest(BattleCamp _Camp)
+    {
+        //  浼戞伅鐘舵��
+        if (_Camp == BattleCamp.Red)
+        {
+            foreach (var item in redCampDict.Values)
+            {
+                item.HaveRest();
+            }
+        }
+        else
+        {
+            foreach (var item in blueCampDict.Values)
+            {
+                item.HaveRest();
+            }
+        }
+    }
+
+    public virtual void Release()
     {
         DestroyTeam(redCampDict);
         DestroyTeam(blueCampDict);
+        allBattleObjDict.Clear();
     }
 
     public void Run()
@@ -127,7 +227,29 @@
         return blueCampList;
     }
 
-#if UNITY_EDITOR
+    public BattleObject GetBattleObjectByIndex(BattleCamp camp, int selfIndex)
+    {
+        if (camp == BattleCamp.Red)
+        {
+            redCampDict.TryGetValue(selfIndex, out BattleObject battleObj);
+            return battleObj;
+        }
+        else
+        {
+            blueCampDict.TryGetValue(selfIndex, out BattleObject battleObj);
+            return battleObj;
+        }
+    }
+
+    public void SetSpeedRatio(float ratio)
+    {
+        foreach (var obj in allBattleObjDict.Values)
+        {
+            obj.SetSpeedRatio(ratio);
+        }
+    }
+
+#if UNITY_EDITOR_STOP_USING
     public void ReviveAll()
     {
         foreach (var kv in allBattleObjDict)
@@ -168,7 +290,7 @@
                 //鏆傛椂娌℃湁鍙敜鐗�
                 // 鏀惧湪绗�7鏍肩殑BOSS鍚庢帓鐨勩�傘�備綅缃斁鍦ㄦ涓棿
                 // a)鍓嶆帓,1銆�2銆�3鍙蜂负鍓嶆帓,鍓嶆帓鍏ㄩ儴闃典骸鍚�,4銆�5銆�6鍙峰嵆鏄墠鎺掍篃鏄悗鎺� 7鍏跺疄涔熸槸鍚庢帓
-                List<BattleObject> frontList = new List<BattleObject>(from BO in returnList where BO.teamHero.heroIndex < 3 && !BO.IsDead() select BO);
+                List<BattleObject> frontList = new List<BattleObject>(from BO in returnList where BO.teamHero.positionNum < 3 && !BO.IsDead() select BO);
                 if (frontList.Count == 0)
                 {
                     frontList.AddRange(returnList);
@@ -176,7 +298,7 @@
                 returnList = frontList;                
                 break;
             case SkillTargetRangeType.Back:
-                List<BattleObject> backList = new List<BattleObject>(from BO in returnList where BO.teamHero.heroIndex >= 3 && !BO.IsDead() select BO);
+                List<BattleObject> backList = new List<BattleObject>(from BO in returnList where BO.teamHero.positionNum >= 3 && !BO.IsDead() select BO);
                 if (backList.Count == 0)
                 {
                     backList.AddRange(returnList);
@@ -198,18 +320,8 @@
             case SkillTargetRangeType.HighestAttack:
                 returnList = new List<BattleObject>(from BO in returnList where !BO.IsDead() select BO);
                 BattleObject mostHighestAttckObj = null;
-                for (int i = 0; i < returnList.Count; i++)
-                {
-                    if (mostHighestAttckObj == null)
-                    {
-                        mostHighestAttckObj = returnList[i];
-                        continue;
-                    }
-                    if (returnList[i].teamHero.attack > mostHighestAttckObj.teamHero.attack)
-                    {
-                        mostHighestAttckObj = returnList[i];
-                    }
-                }
+                //  瀹㈡埛绔笉鍖呭惈鏁版嵁 杩欓噷鍙栫涓�涓�
+                mostHighestAttckObj = returnList[0];
                 returnList.Clear();
                 if (mostHighestAttckObj != null)
                     returnList.Add(mostHighestAttckObj);

--
Gitblit v1.8.0