CombatHPPanel.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. using Common.Utility.CombatEvent;
  2. using Fort23.Core;
  3. using GameLogic.Combat.Hero;
  4. using UnityEngine;
  5. using Utility;
  6. namespace Fort23.Mono
  7. {
  8. [UIBinding(prefab = "CombatHPPanel")]
  9. public partial class CombatHPPanel : UIPanel
  10. {
  11. private Map<IHero, int> currTargetHeroHp = new Map<IHero, int>();
  12. private CombatHeroEntity heroFocusEnemy;
  13. public static async CTask OpenCombatHPPanel()
  14. {
  15. await UIManager.Instance.LoadAndOpenPanel<CombatHPPanel>(null, UILayer.Bottom);
  16. }
  17. public static async CTask CloseCombatHPPanel()
  18. {
  19. UIManager.Instance.HideUIUIPanel<CombatHPPanel>();
  20. }
  21. private void Init()
  22. {
  23. isAddStack = false;
  24. }
  25. protected override void AddEvent()
  26. {
  27. CombatEventManager.Instance.AddEventListener(CombatEventType.TargetAlter, AlaterTargetFocus);
  28. EventManager.Instance.AddEventListener(CustomEventType.CreateHeroHp, CreateHeroHp);
  29. StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
  30. TargetFocus.gameObject.SetActive(false);
  31. // CombatEventManager.Instance.AddEventListener(CombatEventType.TargetAlter, TargetAlter);
  32. }
  33. protected override void DelEvent()
  34. {
  35. EventManager.Instance.RemoveEventListener(CustomEventType.CreateHeroHp, CreateHeroHp);
  36. StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);
  37. // CombatEventManager.Instance.RemoveEventListener(CombatEventType.TargetAlter, TargetAlter);
  38. CombatEventManager.Instance.RemoveEventListener(CombatEventType.TargetAlter, AlaterTargetFocus);
  39. }
  40. public override void AddButtonEvent()
  41. {
  42. }
  43. // private async void TargetAlter(IEventData iEventData)
  44. // {
  45. // CombatHeroTargetAlterEventData combatHeroTargetAlterEventData =
  46. // iEventData as CombatHeroTargetAlterEventData;
  47. // if (combatHeroTargetAlterEventData.combatHeroEntity.IsEnemy)
  48. // {
  49. // return;
  50. // }
  51. //
  52. // if (combatHeroTargetAlterEventData.targetCombatHeroEntity != null)
  53. // {
  54. // CombatHeroEntity t = combatHeroTargetAlterEventData.targetCombatHeroEntity as CombatHeroEntity;
  55. // if (t != null)
  56. // {
  57. // if (t.CurrCombatHeroInfo.heroType == 4||t.CurrCombatHeroInfo.heroType ==3)
  58. // {
  59. // return;
  60. // }
  61. //
  62. // if (!currTargetHeroHp.TryGetValue(combatHeroTargetAlterEventData.targetCombatHeroEntity,
  63. // out int count))
  64. // {
  65. // }
  66. //
  67. // if (count <= 0)
  68. // {
  69. // CreateHpUI(t);
  70. // }
  71. //
  72. // count++;
  73. // currTargetHeroHp[t] = count;
  74. // }
  75. // }
  76. //
  77. // if (combatHeroTargetAlterEventData.lasetCombatHeroEntity != null)
  78. // {
  79. // CombatHeroEntity t = combatHeroTargetAlterEventData.lasetCombatHeroEntity as CombatHeroEntity;
  80. //
  81. // if (t != null)
  82. // {
  83. // if (t.CurrCombatHeroInfo.heroType == 4||t.CurrCombatHeroInfo.heroType ==3)
  84. // {
  85. // return;
  86. // }
  87. // if (currTargetHeroHp.TryGetValue(combatHeroTargetAlterEventData.lasetCombatHeroEntity,
  88. // out int count))
  89. // {
  90. // count--;
  91. // if (count <= 0)
  92. // {
  93. // currTargetHeroHp.Remove(combatHeroTargetAlterEventData.lasetCombatHeroEntity);
  94. // HeroHpUpdateEventData heroHpUpdateEventData = HeroHpUpdateEventData.Create();
  95. // heroHpUpdateEventData.combatHeroEntity = t;
  96. // CombatEventManager.Instance.Dispatch(CombatEventType.ClearHeroHp, heroHpUpdateEventData);
  97. // }
  98. // else
  99. // {
  100. // currTargetHeroHp[t] = count;
  101. // }
  102. //
  103. //
  104. // }
  105. // }
  106. // }
  107. // }
  108. private async void CreateHpUI(CombatHeroEntity combatHeroEntity)
  109. {
  110. // CombatHeroEntity combatHeroEntity = createHeroHpEventData.combatHeroEntity;
  111. HeroHpWidget heroHpWidget =
  112. await UIManager.Instance.CreateGComponentForObject<HeroHpWidget>(HeroHpWidget, null, transform,
  113. isInstance: true);
  114. heroHpWidget.Init(combatHeroEntity);
  115. }
  116. private void AlaterTargetFocus(IEventData iEventData)
  117. {
  118. CombatHeroTargetAlterEventData combatHeroTargetAlterEventData = iEventData as CombatHeroTargetAlterEventData;
  119. CombatHeroEntity combatHeroEntity= combatHeroTargetAlterEventData.combatHeroEntity as CombatHeroEntity;
  120. if (!combatHeroEntity.isPlayer||combatHeroTargetAlterEventData.targetCombatHeroEntity == heroFocusEnemy)
  121. {
  122. return;
  123. }
  124. heroFocusEnemy = combatHeroTargetAlterEventData.targetCombatHeroEntity as CombatHeroEntity;
  125. TargetFocus.gameObject.SetActive(heroFocusEnemy!=null);
  126. UpdateFocusUI();
  127. }
  128. private async void CreateHeroHp(IEventData iEventData)
  129. {
  130. CreateHeroHpEventData createHeroHpEventData = iEventData as CreateHeroHpEventData;
  131. CombatHeroEntity combatHeroEntity = createHeroHpEventData.combatHeroEntity;
  132. if (!combatHeroEntity.isCreateHeroHp)
  133. {
  134. return;
  135. }
  136. CreateHpUI(combatHeroEntity);
  137. }
  138. private void UpdateFocusUI()
  139. {
  140. if (heroFocusEnemy == null)
  141. {
  142. return;
  143. }
  144. Vector3 worldPos = heroFocusEnemy.combatHeroGameObject.hpTransform.position;
  145. Vector3 p = UIManager.Instance.CurrCustomCameraStack.camera.WorldToScreenPoint(worldPos);
  146. Vector3 p2 = UIManager.Instance.UICamera.ScreenToWorldPoint(p);
  147. Vector3 pos = Vector3.zero;
  148. if (heroFocusEnemy.isCreateHeroHp)
  149. {
  150. pos = new Vector3(0, 0.1f, 0);
  151. }
  152. TargetFocus.position = p2+pos;
  153. }
  154. public void Update()
  155. {
  156. UpdateFocusUI();
  157. }
  158. public override void Close()
  159. {
  160. UIManager.Instance.DormancyAllGComponent<HeroHpWidget>();
  161. base.Close();
  162. }
  163. }
  164. }