BossHpWidget.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. using System.Collections.Generic;
  2. using Common.Utility.CombatEvent;
  3. using Fort23.Core;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Combat.Hero;
  6. using GameLogic.Combat.Hero.Turntable;
  7. using GameLogic.Combat.Skill;
  8. using UnityEngine;
  9. namespace Fort23.Mono
  10. {
  11. [UIBinding(prefab = "BossHpWidget")]
  12. public partial class BossHpWidget : UIComponent
  13. {
  14. private CombatHeroEntity combatHeroEntity;
  15. private CombatHeroSkillControl combatHeroSkillControl;
  16. protected BetterList<EnemyGf_skill> currShowGfWidget = new BetterList<EnemyGf_skill>();
  17. private HeroHpWidget heroHpWidget;
  18. private void Init()
  19. {
  20. }
  21. public override void AddEvent()
  22. {
  23. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);
  24. CombatEventManager.Instance.AddEventListener(CombatEventType.AddUseGongFa, AddUseGongFa);
  25. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkillFinish, UseSkillFinish);
  26. StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
  27. }
  28. public override void DelEvent()
  29. {
  30. StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);
  31. CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddUseGongFa, AddUseGongFa);
  32. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);
  33. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkillFinish, UseSkillFinish);
  34. UIManager.Instance.DormancyGComponent(heroHpWidget);
  35. heroHpWidget = null;
  36. UIManager.Instance.DormancyAllGComponent<gf_widget>("bossWidget");
  37. UIManager.Instance.DormancyAllGComponent<MagicWeaponWidget>("bossFaBao");
  38. }
  39. public override void AddButtonEvent()
  40. {
  41. }
  42. private void AddUseGongFa(IEventData iEventData)
  43. {
  44. AddUseGongFaEventData addUseGongFaEventData = iEventData as AddUseGongFaEventData;
  45. if (addUseGongFaEventData.SkillBasic.CombatHeroEntity == combatHeroEntity)
  46. {
  47. ReshSkill();
  48. }
  49. }
  50. private void UseSkill(IEventData iEventData)
  51. {
  52. CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;
  53. if (combatUseSkillEventData.useSkill.CombatHeroEntity == combatHeroEntity)
  54. {
  55. currUseSkillIcon.icon_name = combatUseSkillEventData.useSkill.SelfSkillConfig.icon;
  56. currUseSkillQuan.color =
  57. CombatCalculateTool.Instance.GetColor(combatUseSkillEventData.useSkill.wuXingType);
  58. currUseSkillIcon.gameObject.SetActive(true);
  59. ReshSkill();
  60. }
  61. }
  62. private void UseSkillFinish(IEventData iEventData)
  63. {
  64. UseSkillFinishEventData combatUseSkillEventData = iEventData as UseSkillFinishEventData;
  65. if (combatUseSkillEventData.SkillBasic.CombatHeroEntity == combatHeroEntity)
  66. {
  67. currUseSkillIcon.gameObject.SetActive(false);
  68. currUseSkillQuan.color = Color.white;
  69. ReshSkill();
  70. }
  71. }
  72. private async CTask ReshSkill()
  73. {
  74. currShowGfWidget.Clear();
  75. UIManager.Instance.DormancyAllGComponent<EnemyGf_skill>("bossWidget");
  76. int maxCount = 2;
  77. SkillBasic[] skillQueue = combatHeroSkillControl.GetSkillQueue();
  78. for (int i = 0; i < combatHeroSkillControl.useSkillCount; i++)
  79. {
  80. if (maxCount <= 0)
  81. {
  82. break;
  83. }
  84. SkillBasic skillBasic= skillQueue[i];
  85. maxCount--;
  86. EnemyGf_skill gfWidget = await UIManager.Instance.CreateGComponentForObject<EnemyGf_skill>(
  87. this.gf_widget,
  88. null,
  89. SkillRoot, poolName: "bossWidget", isInstance: true);
  90. gfWidget.InitSkillWidget(skillBasic, combatHeroEntity);
  91. gfWidget.transform.SetAsLastSibling();
  92. currShowGfWidget.Add(gfWidget);
  93. }
  94. if (maxCount > 0)
  95. {
  96. float minA = float.MaxValue;
  97. SkillSlots minSlots = null;
  98. List<SkillSlots> showSkillSlots = new List<SkillSlots>();
  99. for (int j = 0; j < maxCount; j++)
  100. {
  101. minSlots = null;
  102. minA = float.MaxValue;
  103. for (int i = 0; i < combatHeroSkillControl.SkillTurntable.allSkillSlots.Count; i++)
  104. {
  105. SkillSlots skillSlots = combatHeroSkillControl.SkillTurntable.allSkillSlots[i];
  106. if (skillSlots.SkillBasic != null && skillSlots.SkillBasic.SelfSkillConfig.SkillType != 1)
  107. {
  108. continue;
  109. }
  110. float angle = skillSlots.GetFinishAngle();
  111. if (angle < minA && !showSkillSlots.Contains(skillSlots))
  112. {
  113. minA = angle;
  114. minSlots = skillSlots;
  115. }
  116. }
  117. if (minSlots != null)
  118. {
  119. showSkillSlots.Add(minSlots);
  120. EnemyGf_skill gfWidget = await UIManager.Instance.CreateGComponentForObject<EnemyGf_skill>(
  121. this.gf_widget,
  122. null,
  123. SkillRoot, poolName: "bossWidget", isInstance: true);
  124. gfWidget.InitWidget(minSlots, combatHeroEntity);
  125. gfWidget.transform.SetAsLastSibling();
  126. currShowGfWidget.Add(gfWidget);
  127. }
  128. }
  129. }
  130. }
  131. public async CTask ShowWidget(CombatHeroEntity combatHeroEntity)
  132. {
  133. this.combatHeroEntity = combatHeroEntity;
  134. combatHeroSkillControl =
  135. combatHeroEntity.CombatHeroSkillControl as CombatHeroSkillControl;
  136. heroHpWidget =
  137. await UIManager.Instance.CreateGComponentForObject<HeroHpWidget>(HeroHpWidget, null);
  138. heroHpWidget.size = 330;
  139. heroHpWidget.shieldSize = 100;
  140. heroHpWidget.isFollowTarget = false;
  141. heroHpWidget.Init(combatHeroEntity);
  142. ReshSkill();
  143. InitMagicWeapon();
  144. }
  145. private async CTask InitMagicWeapon()
  146. {
  147. int c = combatHeroEntity.heroMagicWeaponControl.MagicWeaponCount;
  148. CombatMagicWeaponEntity[] combatMagicWeaponEntities =
  149. combatHeroEntity.heroMagicWeaponControl.AllMagicWeapon;
  150. for (int i = 0; i < c; i++)
  151. {
  152. CombatMagicWeaponEntity combatMagicWeaponEntity = combatMagicWeaponEntities[i];
  153. MagicWeaponWidget shengShiEventWidget =
  154. await UIManager.Instance.CreateGComponentForObject<MagicWeaponWidget>(MagicWeaponWidget, null,
  155. FaBaoRoot,
  156. isInstance: true, poolName: "bossFaBao");
  157. shengShiEventWidget.InitWidget(combatMagicWeaponEntity);
  158. }
  159. }
  160. public void Update()
  161. {
  162. if (combatHeroEntity == null)
  163. {
  164. return;
  165. }
  166. for (int i = 0; i < currShowGfWidget.Count; i++)
  167. {
  168. currShowGfWidget[i].Update();
  169. }
  170. }
  171. }
  172. }