CombatHPPanel.cs 6.4 KB

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