BossHpWidget.cs 7.8 KB

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