123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- 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 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)
- {
- 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].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 AddCollisionMagicWeapon(CombatMagicWeaponEntity a, CombatMagicWeaponEntity b)
- {
- MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData =
- CObjectPool.Instance.Fetch<MagicWeaponPingDouState.MagicWeaponPingDouData>();
- rollingStateData.target = b;
- a.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou,
- rollingStateData);
- MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData2 =
- CObjectPool.Instance.Fetch<MagicWeaponPingDouState.MagicWeaponPingDouData>();
- rollingStateData.target = a;
- b.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou,
- rollingStateData2);
- magicWeaponCollisionInfoList[a.MagicWeaponCollisionId].SetState(2);
- // MagicWeaponCollisionInfo magicWeaponCollisionInfo = CObjectPool.Instance.Fetch<MagicWeaponCollisionInfo>();
- // magicWeaponCollisionInfo.a = a;
- // magicWeaponCollisionInfo.b = b;
- // magicWeaponCollisionInfoList.Add(magicWeaponCollisionInfo);
- }
- 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);
- }
- }
- }
|