From ed98029a88cd89702980ac7c40b711afddc5aeb2 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 20 十一月 2025 14:44:59 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts

---
 Main/System/Battle/BattleObject/BattleObjMgr.cs |  126 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 116 insertions(+), 10 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObjMgr.cs b/Main/System/Battle/BattleObject/BattleObjMgr.cs
index 0141bdc..446cc62 100644
--- a/Main/System/Battle/BattleObject/BattleObjMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjMgr.cs
@@ -12,29 +12,44 @@
     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);
     }
 
+    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)
+    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);
+                battleObj.heroGo.SetActive(active);
                 allBattleObjDict.Add(battleObj.ObjID, battleObj);
                 campDict.Add(teamHero.positionNum, battleObj);
+                battleObj.SetSpeedRatio(battleField.speedRatio);
             }
         }
     }
@@ -48,7 +63,19 @@
         return null;
     }
 
-    public List<BattleObject> GetBattleObjList(H0604_tagUseSkillAttack tagUseSkillAttack)
+    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)
@@ -63,25 +90,82 @@
         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)
     {
         foreach (var item in campDict)
         {
             BattleObject battleObj = item.Value;
+            var positionNum = item.Key;
             if (battleObj != null)
             {
                 allBattleObjDict.Remove(battleObj.ObjID);
-                BattleObjectFactory.DestroyBattleObject(item.Key, battleObj);
+                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()
@@ -143,6 +227,28 @@
         return blueCampList;
     }
 
+    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()
     {

--
Gitblit v1.8.0