using System.Collections.Generic; using Common.Utility.CombatEvent; using Fort23.Core; using GameLogic.Combat.Hero; using GameLogic.Combat.Hero.State; using UnityEngine; namespace GameLogic.Combat.CombatTool { /// /// 法宝战斗场景 /// public class MagicWeaponCombatSence { private BetterList _enemyMagicWeaponList = new BetterList(); private BetterList _playerMagicWeaponList = new BetterList(); /// /// 战斗包围盒 minX miny maxx maxy /// public Vector4 combatBox; /// /// 我方法宝入场点 /// public Vector3 myEnterCombatPos; /// /// 地方法宝入场点 /// public Vector3 enemyEnterCombatPos; private BetterList magicWeaponCollisionInfoList = new BetterList(); public void Init() { CombatEventManager.Instance.AddEventListener(CombatEventType.MagicWeaponDie, MagicWeaponDie); } private void MagicWeaponDie(IEventData iEventData) { HeroDieEventData heroDieEventData = iEventData as HeroDieEventData; CombatMagicWeaponEntity combatMagicWeaponEntity = heroDieEventData.combatHeroEntity as CombatMagicWeaponEntity; _enemyMagicWeaponList.Remove(combatMagicWeaponEntity); _playerMagicWeaponList.Remove(combatMagicWeaponEntity); for (int i = 0; i < magicWeaponCollisionInfoList.Count; i++) { if (magicWeaponCollisionInfoList[i].a == combatMagicWeaponEntity || magicWeaponCollisionInfoList[i].b == combatMagicWeaponEntity) { RemoveCollisionMagicWeapon(magicWeaponCollisionInfoList[i]); } } } public void SetMagicWeaponCombatSence(Vector3 myHeroPos, Vector3 fangXiang) { myEnterCombatPos = myHeroPos + fangXiang * 2 + new Vector3(0, 10, 0); myEnterCombatPos = myHeroPos + fangXiang * 18 + new Vector3(0, 10, 0); } /// /// 将法宝添加导战斗场景 /// /// public void AddMagicWeaponToSence(CombatMagicWeaponEntity combatMagicWeaponEntity) { if (combatMagicWeaponEntity.IsEnemy) { _enemyMagicWeaponList.Add(combatMagicWeaponEntity); combatMagicWeaponEntity.useIndex= _enemyMagicWeaponList.Count; } else { _playerMagicWeaponList.Add(combatMagicWeaponEntity); combatMagicWeaponEntity.useIndex= _playerMagicWeaponList.Count; } combatMagicWeaponEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Active); } public void TriggerMagicWeapon(CombatMagicWeaponEntity a,CombatMagicWeaponEntity b) { } public void Update(float t) { // for (int i = 0; i < _enemyMagicWeaponList.Count; i++) // { // _enemyMagicWeaponList[i].Update(t); // } // // for (int i = 0; i < _playerMagicWeaponList.Count; i++) // { // _playerMagicWeaponList[i].Update(t); // } for (int i = 0; i < magicWeaponCollisionInfoList.Count; i++) { magicWeaponCollisionInfoList[i].Update(t); } } public CombatMagicWeaponEntity FindCollidingTarget(CombatMagicWeaponEntity combatMagicWeaponEntity) { bool isEnemy = combatMagicWeaponEntity.IsEnemy; BetterList magicWeaponList = isEnemy ? _playerMagicWeaponList : _enemyMagicWeaponList; if (magicWeaponList == null) { return null; } List nullTarget = new List(); for (int i = 0; i < magicWeaponList.Count; i++) { if (magicWeaponList[i].CollidingTarget == combatMagicWeaponEntity) { return magicWeaponList[i]; } if (magicWeaponList[i].CollidingTarget == null) { nullTarget.Add(magicWeaponList[i]); } } if (nullTarget.Count > 0) { int index = CombatCalculateTool.Instance.GetOdd(0, nullTarget.Count); return nullTarget[index]; } return null; } public void AddCollisionMagicWeapon(CombatMagicWeaponEntity a, CombatMagicWeaponEntity b) { MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData = CObjectPool.Instance.Fetch(); rollingStateData.target = b; a.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou, rollingStateData); MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData2 = CObjectPool.Instance.Fetch(); rollingStateData.target = a; b.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou, rollingStateData2); MagicWeaponCollisionInfo magicWeaponCollisionInfo = CObjectPool.Instance.Fetch(); magicWeaponCollisionInfo.a = a; magicWeaponCollisionInfo.b = b; magicWeaponCollisionInfoList.Add(magicWeaponCollisionInfo); } public void RemoveCollisionMagicWeapon(MagicWeaponCollisionInfo collisionInfo) { magicWeaponCollisionInfoList.Remove(collisionInfo); collisionInfo.Finish(); CObjectPool.Instance.Recycle(collisionInfo); } } }