CombatHeroController.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. using System;
  2. using Common.Utility.CombatEvent;
  3. using Fort23.Core;
  4. using Fort23.UTool;
  5. using GameLogic.Combat.Hero;
  6. using UnityEngine;
  7. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  8. namespace GameLogic.Combat.CombatTool
  9. {
  10. public class CombatHeroController : IDisposable
  11. {
  12. private BetterList<CombatHeroEntity> myHero = new BetterList<CombatHeroEntity>();
  13. private BetterList<CombatHeroEntity> enemyHero = new BetterList<CombatHeroEntity>();
  14. private BetterList<ILifetCycleHitPoint> myHeroHitPoint = new BetterList<ILifetCycleHitPoint>();
  15. private BetterList<ILifetCycleHitPoint> enemyHeroHitPoint = new BetterList<ILifetCycleHitPoint>();
  16. protected CombatController combatController;
  17. private BetterList<CombatHeroEntity> heroDie = new BetterList<CombatHeroEntity>();
  18. private BetterList<CombatHeroEntity> heroDispose = new BetterList<CombatHeroEntity>();
  19. public Vector3[] followMovePos = new Vector3[]
  20. {
  21. new Vector3(0, 0, 0),
  22. new Vector3(-1f, 0, -0.5f),
  23. new Vector3(1f, 0, -0.5f),
  24. new Vector3(0, 0, -2f),
  25. };
  26. public CombatHeroEntity followTarget;
  27. public void Init(CombatController combatController)
  28. {
  29. this.combatController = combatController;
  30. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, CombatUseSkillEventData);
  31. EventManager.Instance.AddEventListener(CustomEventType.HeroLvUp, HeroUpgrade);
  32. }
  33. private void HeroUpgrade(IEventData eventData)
  34. {
  35. HeroPowerUpEventData heroPowerUpEventData = eventData as HeroPowerUpEventData;
  36. int id = heroPowerUpEventData.heroModelID;
  37. CombatHeroEntity combatHeroEntity = null;
  38. for (int i = 0; i < myHero.Count; i++)
  39. {
  40. if (myHero[i].CurrCombatHeroInfo.modelID == id)
  41. {
  42. combatHeroEntity = myHero[i];
  43. break;
  44. }
  45. }
  46. if (combatHeroEntity == null)
  47. {
  48. for (int i = 0; i < heroDie.Count; i++)
  49. {
  50. if (heroDie[i].CurrCombatHeroInfo.modelID == id)
  51. {
  52. combatHeroEntity = heroDie[i];
  53. break;
  54. }
  55. }
  56. }
  57. CombatHeroInfo combatHeroInfo = PlayerManager.Instance.heroController.GetHeroInfo(id);
  58. long addHp = combatHeroInfo.hp.Value - combatHeroEntity.MaxCombatHeroInfo.hp.Value;
  59. combatHeroEntity.MaxCombatHeroInfo.hp = combatHeroInfo.hp;
  60. combatHeroEntity.MaxCombatHeroInfo.defense = combatHeroInfo.defense;
  61. combatHeroEntity.MaxCombatHeroInfo.attack = combatHeroInfo.attack;
  62. combatHeroEntity.CurrCombatHeroInfo.defense = combatHeroInfo.defense;
  63. combatHeroEntity.CurrCombatHeroInfo.attack = combatHeroInfo.attack;
  64. if (!combatHeroEntity.isDie)
  65. {
  66. if (addHp > 0)
  67. {
  68. combatHeroEntity.CurrCombatHeroInfo.hp += addHp;
  69. }
  70. else
  71. {
  72. }
  73. }
  74. }
  75. public void RemoveDieHero(CombatHeroEntity combatHeroEntity)
  76. {
  77. heroDie.Remove(combatHeroEntity);
  78. if (!heroDispose.Contains(combatHeroEntity))
  79. {
  80. heroDispose.Add(combatHeroEntity);
  81. }
  82. }
  83. /// <summary>
  84. /// 复活死亡的英雄
  85. /// </summary>
  86. public void ResurrectionDieHero(CombatHeroEntity combatHeroEntity)
  87. {
  88. heroDie.Remove(combatHeroEntity);
  89. combatHeroEntity.CurrCombatHeroInfo.hp = combatHeroEntity.MaxCombatHeroInfo.hp;
  90. AddHero(combatHeroEntity);
  91. combatHeroEntity.HeroResurrection();
  92. }
  93. public void Update(float t)
  94. {
  95. for (int i = 0; i < myHero.Count; i++)
  96. {
  97. myHero[i].Update(t);
  98. }
  99. for (int i = 0; i < enemyHero.Count; i++)
  100. {
  101. enemyHero[i].Update(t);
  102. }
  103. for (int i = 0; i < heroDie.Count; i++)
  104. {
  105. heroDie[i].Update(t);
  106. }
  107. for (int i = 0; i < heroDispose.Count; i++)
  108. {
  109. heroDispose[i].Dispose();
  110. }
  111. heroDispose.Clear();
  112. }
  113. public void AddHeroDie(CombatHeroEntity hero)
  114. {
  115. heroDie.Add(hero);
  116. }
  117. public void AddHero(CombatHeroEntity hero)
  118. {
  119. if (hero.IsEnemy)
  120. {
  121. enemyHero.Add(hero);
  122. }
  123. else
  124. {
  125. myHero.Add(hero);
  126. }
  127. }
  128. public void FindNumberMinHero()
  129. {
  130. int min = 9999;
  131. followTarget = null;
  132. for (int i = 0; i < myHero.Count; i++)
  133. {
  134. CombatHeroEntity c = myHero[i];
  135. if (c.number < min)
  136. {
  137. min = c.number;
  138. followTarget = c;
  139. }
  140. }
  141. }
  142. public void SetFollowTarget()
  143. {
  144. FindNumberMinHero();
  145. for (int i = 0; i < myHero.Count; i++)
  146. {
  147. CombatHeroEntity c = myHero[i];
  148. if (c != followTarget)
  149. {
  150. c.isFollowState = true;
  151. c.CombatAIBasic.ChangeState(CombatHeroStateType.followIdle);
  152. }
  153. }
  154. }
  155. private void CombatUseSkillEventData(IEventData iEventData)
  156. {
  157. CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;
  158. if (combatUseSkillEventData.useSkill.SelfSkillConfig.SkillType == 1)
  159. {
  160. for (int i = 0; i < myHero.Count; i++)
  161. {
  162. CombatHeroEntity c = myHero[i];
  163. if (c.isFollowState)
  164. {
  165. c.isFollowState = false;
  166. c.CombatAIBasic.ChangeState(CombatHeroStateType.idle);
  167. }
  168. }
  169. }
  170. }
  171. public void RemoveHero(CombatHeroEntity hero)
  172. {
  173. if (hero.IsEnemy)
  174. {
  175. enemyHero.Remove(hero);
  176. }
  177. else
  178. {
  179. myHero.Remove(hero);
  180. }
  181. }
  182. public void AddHeroHitPoint(bool isEnemy, ILifetCycleHitPoint hitPoint)
  183. {
  184. if (isEnemy)
  185. {
  186. enemyHeroHitPoint.Add(hitPoint);
  187. }
  188. else
  189. {
  190. myHeroHitPoint.Add(hitPoint);
  191. }
  192. }
  193. public void RemoveHeroHitPoint(bool isEnemy, ILifetCycleHitPoint hitPoint)
  194. {
  195. if (isEnemy)
  196. {
  197. enemyHeroHitPoint.Remove(hitPoint);
  198. }
  199. else
  200. {
  201. myHeroHitPoint.Remove(hitPoint);
  202. }
  203. }
  204. public void Dispose()
  205. {
  206. myHero.Dispose();
  207. enemyHero.Dispose();
  208. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, CombatUseSkillEventData);
  209. }
  210. public Vector3 GetFollowPos(CombatHeroEntity combatHeroEntity)
  211. {
  212. int index = combatHeroEntity.number - followTarget.number;
  213. return followTarget.combatHeroGameObject.transform.TransformPoint((followMovePos[index]));
  214. // return followMovePos[index] + .dotPos;
  215. }
  216. public CombatHeroEntity[] GetHero(bool isEnemy)
  217. {
  218. if (isEnemy)
  219. {
  220. return enemyHero.ToArray();
  221. }
  222. else
  223. {
  224. return myHero.ToArray();
  225. }
  226. }
  227. public ILifetCycleHitPoint[] GetHeroHitPoint(bool isEnemy)
  228. {
  229. if (isEnemy)
  230. {
  231. return enemyHeroHitPoint.ToArray();
  232. }
  233. else
  234. {
  235. return myHeroHitPoint.ToArray();
  236. }
  237. }
  238. }
  239. }