MagicWeaponCombatSence.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using System.Collections.Generic;
  2. using Common.Utility.CombatEvent;
  3. using Fort23.Core;
  4. using GameLogic.Combat.Hero;
  5. using GameLogic.Combat.Hero.State;
  6. using UnityEngine;
  7. namespace GameLogic.Combat.CombatTool
  8. {
  9. /// <summary>
  10. /// 法宝战斗场景
  11. /// </summary>
  12. public class MagicWeaponCombatSence
  13. {
  14. private BetterList<CombatMagicWeaponEntity> _enemyMagicWeaponList = new BetterList<CombatMagicWeaponEntity>();
  15. private BetterList<CombatMagicWeaponEntity> _playerMagicWeaponList = new BetterList<CombatMagicWeaponEntity>();
  16. /// <summary>
  17. /// 战斗包围盒 minX miny maxx maxy
  18. /// </summary>
  19. public Vector4 combatBox;
  20. /// <summary>
  21. /// 我方法宝入场点
  22. /// </summary>
  23. public Vector3 myEnterCombatPos;
  24. /// <summary>
  25. /// 地方法宝入场点
  26. /// </summary>
  27. public Vector3 enemyEnterCombatPos;
  28. private BetterList<MagicWeaponCollisionInfo> magicWeaponCollisionInfoList =
  29. new BetterList<MagicWeaponCollisionInfo>();
  30. public void Init()
  31. {
  32. CombatEventManager.Instance.AddEventListener(CombatEventType.MagicWeaponDie, MagicWeaponDie);
  33. }
  34. private void MagicWeaponDie(IEventData iEventData)
  35. {
  36. HeroDieEventData heroDieEventData = iEventData as HeroDieEventData;
  37. CombatMagicWeaponEntity combatMagicWeaponEntity =
  38. heroDieEventData.combatHeroEntity as CombatMagicWeaponEntity;
  39. _enemyMagicWeaponList.Remove(combatMagicWeaponEntity);
  40. _playerMagicWeaponList.Remove(combatMagicWeaponEntity);
  41. for (int i = 0; i < magicWeaponCollisionInfoList.Count; i++)
  42. {
  43. if (magicWeaponCollisionInfoList[i].a == combatMagicWeaponEntity ||
  44. magicWeaponCollisionInfoList[i].b == combatMagicWeaponEntity)
  45. {
  46. RemoveCollisionMagicWeapon(magicWeaponCollisionInfoList[i]);
  47. }
  48. }
  49. }
  50. public void SetMagicWeaponCombatSence(Vector3 myHeroPos, Vector3 fangXiang)
  51. {
  52. myEnterCombatPos = myHeroPos + fangXiang * 2 + new Vector3(0, 10, 0);
  53. myEnterCombatPos = myHeroPos + fangXiang * 18 + new Vector3(0, 10, 0);
  54. }
  55. /// <summary>
  56. /// 将法宝添加导战斗场景
  57. /// </summary>
  58. /// <param name="combatMagicWeaponEntity"></param>
  59. public void AddMagicWeaponToSence(CombatMagicWeaponEntity combatMagicWeaponEntity)
  60. {
  61. if (combatMagicWeaponEntity.IsEnemy)
  62. {
  63. _enemyMagicWeaponList.Add(combatMagicWeaponEntity);
  64. combatMagicWeaponEntity.useIndex= _enemyMagicWeaponList.Count;
  65. }
  66. else
  67. {
  68. _playerMagicWeaponList.Add(combatMagicWeaponEntity);
  69. combatMagicWeaponEntity.useIndex= _playerMagicWeaponList.Count;
  70. }
  71. combatMagicWeaponEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Active);
  72. }
  73. public void TriggerMagicWeapon(CombatMagicWeaponEntity a,CombatMagicWeaponEntity b)
  74. {
  75. }
  76. public void Update(float t)
  77. {
  78. // for (int i = 0; i < _enemyMagicWeaponList.Count; i++)
  79. // {
  80. // _enemyMagicWeaponList[i].Update(t);
  81. // }
  82. //
  83. // for (int i = 0; i < _playerMagicWeaponList.Count; i++)
  84. // {
  85. // _playerMagicWeaponList[i].Update(t);
  86. // }
  87. for (int i = 0; i < magicWeaponCollisionInfoList.Count; i++)
  88. {
  89. magicWeaponCollisionInfoList[i].Update(t);
  90. }
  91. }
  92. public CombatMagicWeaponEntity FindCollidingTarget(CombatMagicWeaponEntity combatMagicWeaponEntity)
  93. {
  94. bool isEnemy = combatMagicWeaponEntity.IsEnemy;
  95. BetterList<CombatMagicWeaponEntity> magicWeaponList =
  96. isEnemy ? _playerMagicWeaponList : _enemyMagicWeaponList;
  97. if (magicWeaponList == null)
  98. {
  99. return null;
  100. }
  101. List<CombatMagicWeaponEntity> nullTarget = new List<CombatMagicWeaponEntity>();
  102. for (int i = 0; i < magicWeaponList.Count; i++)
  103. {
  104. if (magicWeaponList[i].CollidingTarget == combatMagicWeaponEntity)
  105. {
  106. return magicWeaponList[i];
  107. }
  108. if (magicWeaponList[i].CollidingTarget == null)
  109. {
  110. nullTarget.Add(magicWeaponList[i]);
  111. }
  112. }
  113. if (nullTarget.Count > 0)
  114. {
  115. int index = CombatCalculateTool.Instance.GetOdd(0, nullTarget.Count);
  116. return nullTarget[index];
  117. }
  118. return null;
  119. }
  120. public void AddCollisionMagicWeapon(CombatMagicWeaponEntity a, CombatMagicWeaponEntity b)
  121. {
  122. MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData =
  123. CObjectPool.Instance.Fetch<MagicWeaponPingDouState.MagicWeaponPingDouData>();
  124. rollingStateData.target = b;
  125. a.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou,
  126. rollingStateData);
  127. MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData2 =
  128. CObjectPool.Instance.Fetch<MagicWeaponPingDouState.MagicWeaponPingDouData>();
  129. rollingStateData.target = a;
  130. b.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou,
  131. rollingStateData2);
  132. MagicWeaponCollisionInfo magicWeaponCollisionInfo = CObjectPool.Instance.Fetch<MagicWeaponCollisionInfo>();
  133. magicWeaponCollisionInfo.a = a;
  134. magicWeaponCollisionInfo.b = b;
  135. magicWeaponCollisionInfoList.Add(magicWeaponCollisionInfo);
  136. }
  137. public void RemoveCollisionMagicWeapon(MagicWeaponCollisionInfo collisionInfo)
  138. {
  139. magicWeaponCollisionInfoList.Remove(collisionInfo);
  140. collisionInfo.Finish();
  141. CObjectPool.Instance.Recycle(collisionInfo);
  142. }
  143. }
  144. }