| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | using System.Collections.Generic;using Common.Utility.CombatEvent;using Fort23.Core;using GameLogic.Combat.Hero;using GameLogic.Combat.Hero.State;using UnityEngine;using Utility;namespace GameLogic.Combat.CombatTool{    /// <summary>    /// 法宝战斗场景    /// </summary>    public class MagicWeaponCombatSence    {        private BetterList<CombatMagicWeaponEntity> _enemyMagicWeaponList = new BetterList<CombatMagicWeaponEntity>();        private BetterList<CombatMagicWeaponEntity> _playerMagicWeaponList = new BetterList<CombatMagicWeaponEntity>();        /// <summary>        /// 战斗包围盒 minX miny maxx maxy        /// </summary>        public Vector4 combatBox;        /// <summary>        /// 我方法宝入场点        /// </summary>        public Vector3 myEnterCombatPos;        /// <summary>        /// 地方法宝入场点        /// </summary>        public Vector3 enemyEnterCombatPos;        private Map<int, MagicWeaponCollisionInfo> magicWeaponCollisionInfoList =            new Map<int, MagicWeaponCollisionInfo>();        private int MagicWeaponCollisionID;        public void CloseSecene()        {            magicWeaponCollisionInfoList.Clear();            for (int i = 0; i < _enemyMagicWeaponList.Count; i++)            {                _enemyMagicWeaponList[i].CombatAIBasic.ChangeState(CombatHeroStateType.XiuMian);            }            for (int i = 0; i < _playerMagicWeaponList.Count; i++)            {                _playerMagicWeaponList[i].CombatAIBasic.ChangeState(CombatHeroStateType.XiuMian);            }            _playerMagicWeaponList.Clear();            _enemyMagicWeaponList.Clear();        }        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);            RemoveCollisionMagicWeapon(combatMagicWeaponEntity.MagicWeaponCollisionId);        }        public void SetMagicWeaponCombatSence(Vector3 myHeroPos, Vector3 fangXiang)        {            myEnterCombatPos = myHeroPos + fangXiang * 2 + new Vector3(0, 10, 0);            enemyEnterCombatPos = myHeroPos + fangXiang * 18 + new Vector3(0, 10, 0);        }        /// <summary>        /// 将法宝添加导战斗场景        /// </summary>        /// <param name="combatMagicWeaponEntity"></param>        public void AddMagicWeaponToSence(CombatMagicWeaponEntity combatMagicWeaponEntity)        {            if (combatMagicWeaponEntity.IsEnemy)            {                _enemyMagicWeaponList.Add(combatMagicWeaponEntity);                combatMagicWeaponEntity.useIndex = _enemyMagicWeaponList.Count;            }            else            {                _playerMagicWeaponList.Add(combatMagicWeaponEntity);                combatMagicWeaponEntity.useIndex = _playerMagicWeaponList.Count;            }            FindCollidingTarget(combatMagicWeaponEntity);            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 (magicWeaponCollisionInfoList.Begin(); magicWeaponCollisionInfoList.Next();)            {                magicWeaponCollisionInfoList.Value.Update(t);            }        }        public MagicWeaponCollisionInfo FindMagicWeaponCollisionInfo(int id)        {            if (magicWeaponCollisionInfoList.TryGetValue(id, out var info))            {                return info;            }            return null;        }        private void FindCollidingTarget(CombatMagicWeaponEntity combatMagicWeaponEntity)        {            if (combatMagicWeaponEntity.isMagicWeaponTreasureBook)            {                return;            }            bool isEnemy = combatMagicWeaponEntity.IsEnemy;            BetterList<CombatMagicWeaponEntity> magicWeaponList =                isEnemy ? _playerMagicWeaponList : _enemyMagicWeaponList;            if (magicWeaponList == null)            {                return;            }            List<CombatMagicWeaponEntity> nullTarget = new List<CombatMagicWeaponEntity>();            for (int i = 0; i < magicWeaponList.Count; i++)            {                if (magicWeaponList[i].CombatAIBasic.stateControl.CurrStateName != CombatHeroStateType.idle &&                    magicWeaponList[i].CombatAIBasic.stateControl.CurrStateName != CombatHeroStateType.Active)                {                    continue;                }                // if (magicWeaponList[i].CollidingTarget == combatMagicWeaponEntity)                // {                //     return magicWeaponList[i];                // }                if (magicWeaponList[i].isMagicWeaponTreasureBook)                {                    continue;                }                if (magicWeaponList[i].MagicWeaponCollisionId < 0)                {                    nullTarget.Add(magicWeaponList[i]);                }            }            if (nullTarget.Count > 0)            {                int index = CombatCalculateTool.Instance.GetOdd(0, nullTarget.Count);                CombatMagicWeaponEntity target = nullTarget[index];                MagicWeaponCollisionInfo magicWeaponCollisionInfo =                    CObjectPool.Instance.Fetch<MagicWeaponCollisionInfo>();                magicWeaponCollisionInfo.Init(combatMagicWeaponEntity, target, MagicWeaponCollisionID);                magicWeaponCollisionInfoList.Add(MagicWeaponCollisionID, magicWeaponCollisionInfo);                MagicWeaponCollisionID++;            }            return;        }        public void RemoveCollisionMagicWeapon(int id)        {            magicWeaponCollisionInfoList.Remove(id, out var collisionInfo);            if (collisionInfo != null)            {                collisionInfo.Finish();                CObjectPool.Instance.Recycle(collisionInfo);            }        }        public void RemoveCollisionMagicWeapon(MagicWeaponCollisionInfo collisionInfo)        {            magicWeaponCollisionInfoList.Remove(collisionInfo.id);            collisionInfo.Finish();            CObjectPool.Instance.Recycle(collisionInfo);        }    }}
 |