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