BossHpWidget.cs 7.4 KB

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