RageEffect2D.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using UnityEngine;
  2. using System.Collections;
  3. public class RageEffect2D
  4. {
  5. public const string HUD_RAGE_PREFAB = "Battle/RageImage";
  6. private GameObject mHud;
  7. private Fighter mFighter = null;
  8. private RectTransform mItemRt = null;
  9. Vector3 m_ragePos;
  10. public void Born(Fighter owner)
  11. {
  12. mFighter = owner;
  13. mHud = null;
  14. mItemRt = null;
  15. //EventMgr.AddEventListener<bool>(ECoreEventType.EID_BOSS_IN_RAGE, OnShowRage);
  16. }
  17. public void Dispose()
  18. {
  19. if (mHud != null)
  20. {
  21. ResourceMgr.Instance.RecycleGO(Constants.UIPath, HUD_RAGE_PREFAB, mHud);
  22. }
  23. mHud = null;
  24. mItemRt = null;
  25. }
  26. public void Destroy()
  27. {
  28. //EventMgr.RemoveEventListener<bool>(ECoreEventType.EID_BOSS_IN_RAGE, OnShowRage);
  29. Dispose();
  30. }
  31. public void Prepare()
  32. {
  33. InitHudUI();
  34. }
  35. public void Fight()
  36. {
  37. #if UNITY_EDITOR
  38. if (mHud)
  39. {
  40. mHud.name = mFighter.Ctrl.name + "_Rage";
  41. }
  42. #endif
  43. ResetHudUI();
  44. }
  45. public void Deactive()
  46. {
  47. SetVisible(false);
  48. }
  49. public void OnActorDead()
  50. {
  51. if (mFighter == null) return;
  52. SetVisible(false);
  53. }
  54. public void OnActorRevive()
  55. {
  56. if (mFighter == null) return;
  57. SetVisible(false);
  58. }
  59. public void SetVisible(bool vis)
  60. {
  61. if (mHud == null) return;
  62. mHud.SetActive(vis);
  63. }
  64. public void LateUpdate()
  65. {
  66. if (mHud == null) return;
  67. if (mFighter == null)
  68. {
  69. ResourceMgr.Instance.RecycleGO(Constants.UIPath, HUD_RAGE_PREFAB, mHud);
  70. mHud = null;
  71. return;
  72. }
  73. // 这几种情况不需要更新下面的东西,太费了
  74. if (!mFighter.IsVisible)
  75. {
  76. return;
  77. }
  78. Vector3 curUIPointPos = mFighter.Ctrl.GetUIPointPos();
  79. // Update Hud
  80. if (mHud.activeSelf)
  81. {
  82. Vector3 hudPosition = curUIPointPos + mFighter.Actor.AvatarData.crazyPos;
  83. Vector3 curPos = Camera.main.WorldToViewportPoint(hudPosition);
  84. bool isNeedUpdateUIHud = (m_ragePos != curPos);
  85. m_ragePos = curPos;
  86. if (isNeedUpdateUIHud)
  87. {
  88. UpdateUIHud(ref curPos);
  89. }
  90. }
  91. }
  92. ///-------------------------------------------------
  93. /// 初始化Hud UI
  94. ///-------------------------------------------------
  95. private void InitHudUI()
  96. {
  97. if (mFighter == null)
  98. return;
  99. if (mHud == null)
  100. {
  101. mHud = ResourceMgr.Instance.GetGoFromPool(Constants.UIPath, HUD_RAGE_PREFAB);
  102. DebugHelper.Assert(mHud != null, "wtf?");
  103. if (mHud == null)
  104. {
  105. return;
  106. }
  107. Transform hudPanel = BattleFlyWordMgr.Instance.HudRootTrans;
  108. if (hudPanel != null)
  109. {
  110. mHud.transform.SetParent(hudPanel, true);
  111. mHud.transform.localScale = Vector3.one;
  112. mHud.transform.localRotation = Quaternion.identity;
  113. }
  114. RectTransform rt = mHud.GetComponent<RectTransform>();
  115. rt.anchorMin = Vector2.zero;
  116. rt.anchorMax = Vector2.one;
  117. rt.anchoredPosition3D = Vector3.zero;
  118. rt.offsetMin = rt.offsetMax = Vector2.zero;
  119. //Canvas hudCanvas = mHud.GetComponent<Canvas>();
  120. //hudCanvas.overrideSorting = true;
  121. //hudCanvas.sortingOrder = 0;
  122. Transform item = mHud.transform.Find("Item");
  123. mItemRt = item.GetComponent<RectTransform>();
  124. }
  125. SetVisible(false);
  126. }
  127. private void ResetHudUI()
  128. {
  129. if (mHud == null || mFighter == null)
  130. {
  131. return;
  132. }
  133. Transform hudPanel = BattleFlyWordMgr.Instance.HudRootTrans;
  134. if (hudPanel != null)
  135. {
  136. mHud.transform.SetParent(hudPanel, true);
  137. mHud.transform.localScale = Vector3.one;
  138. mHud.transform.localRotation = Quaternion.identity;
  139. }
  140. SetVisible(false);
  141. }
  142. ///-------------------------------------------------
  143. /// 更新UI Hud
  144. ///-------------------------------------------------
  145. private void UpdateUIHud(ref Vector3 curPos)
  146. {
  147. if (mItemRt != null)
  148. {
  149. mItemRt.anchoredPosition3D = new Vector3((curPos.x - 0.5f) * UIMgr.SCREEN_WIDTH, (curPos.y - 0.5f) * UIMgr.SCREEN_HEIGHT, 0);
  150. }
  151. }
  152. public void OnShowRage(bool rage)
  153. {
  154. SetVisible(rage);
  155. }
  156. }