HpbarManager.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. using GameFramework.Event;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityGameFramework.Runtime;
  6. /// <summary>
  7. /// 描述:血条管理者
  8. /// 作者:WJ
  9. /// </summary>
  10. public class HpbarManager : MonoBehaviour
  11. {
  12. /// <summary>
  13. /// 单键
  14. /// </summary>
  15. private static HpbarManager m_Instance;
  16. /// <summary>
  17. /// 血条模版
  18. /// </summary>
  19. private GameObject mHPTemp = null;
  20. /// <summary>
  21. /// 英雄血条模版
  22. /// </summary>
  23. private GameObject mHeroHPTemp = null;
  24. /// <summary>
  25. /// 提示模版
  26. /// </summary>
  27. private GameObject mTipTemp = null;
  28. /// <summary>
  29. /// 暴击提示模版
  30. /// </summary>
  31. private GameObject mCirTipTemp = null;
  32. /// <summary>
  33. /// 名称模板
  34. /// </summary>
  35. private GameObject mItemNameTemp = null;
  36. /// <summary>
  37. /// Missing模板
  38. /// </summary>
  39. private GameObject mMissingTemp = null;
  40. /// <summary>
  41. /// 血条
  42. /// </summary>
  43. private Dictionary<int, Hpbar> mHPs = new Dictionary<int, Hpbar>();
  44. /// <summary>
  45. /// Canvas
  46. /// </summary>
  47. private Canvas _canvas = null;
  48. /// <summary>
  49. /// 物品名称
  50. /// </summary>
  51. private Dictionary<Transform, DropItemName> mItemNames = new Dictionary<Transform, DropItemName>();
  52. /// <summary>
  53. /// 单键
  54. /// </summary>
  55. public static HpbarManager Instance
  56. {
  57. get
  58. {
  59. if (m_Instance == null)
  60. {
  61. m_Instance = GameObject.Find("HpbarManager").AddComponent<HpbarManager>();
  62. m_Instance.Init();
  63. }
  64. return m_Instance;
  65. }
  66. }
  67. /// <summary>
  68. /// 唤醒
  69. /// </summary>
  70. public void Init()
  71. {
  72. mHPTemp = transform.Find("HP").gameObject;
  73. mHeroHPTemp = transform.Find("HeroHP").gameObject;
  74. mTipTemp = transform.Find("Tip").gameObject;
  75. mCirTipTemp = transform.Find("CirTip").gameObject;
  76. mItemNameTemp = transform.Find("ItemName").gameObject;
  77. mMissingTemp = transform.Find("Missing").gameObject;
  78. _canvas = transform.GetComponent<Canvas>();
  79. // 注册
  80. EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
  81. eventCmpt.Subscribe(HeroHPMPRefreshEvent.EventId, HPMPEvent);
  82. }
  83. private void OnDestroy()
  84. {
  85. // 注销
  86. EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
  87. if (eventCmpt.Check(HeroHPMPRefreshEvent.EventId, HPMPEvent))
  88. {
  89. eventCmpt.Unsubscribe(HeroHPMPRefreshEvent.EventId, HPMPEvent);
  90. }
  91. }
  92. public void HPMPEvent(object sender, GameEventArgs e)
  93. {
  94. HeroHPMPRefreshEvent refreshEvent = e as HeroHPMPRefreshEvent;
  95. RoleManager.Instance.UpdatePlayerDate();
  96. Role r = RoleManager.Instance.GetPlayer();
  97. // 英雄升级,血量加满
  98. if (refreshEvent.sourceType == Enum_EventType.HeroLvlUp)
  99. {
  100. r.mData.ResetHpMp();
  101. }
  102. else
  103. {
  104. BattleCanvas.Instance.ShowPlayerHP(r.mData.HP_Final, r.mData.MaxHP_Final);
  105. }
  106. BattleCanvas.Instance.ShowPlayerPower(r.mData.MP_Final, r.mData.MaxMP_Final);
  107. }
  108. /// <summary>
  109. /// /// <summary>
  110. /// 更新血条
  111. /// </summary>
  112. /// </summary>
  113. /// <param name="bAttrType">角色ID</param>
  114. /// <param name="role">角色</param>
  115. /// <param name="camp">阵营</param>
  116. /// <param name="val">值</param>
  117. public void UpdateHpbar(Role role, float progressVal, int Damage)
  118. {
  119. if (!(progressVal > 0 || progressVal < 0))
  120. {
  121. return;
  122. }
  123. // 设置战斗状态
  124. if (UI_BaseMainWindow.Instance() != null)
  125. {
  126. UI_BaseMainWindow.Instance().SetFightingState(true);
  127. }
  128. if (mHPs.ContainsKey(role.mData.UID))
  129. {
  130. if (mHPs[role.mData.UID] == null)
  131. {
  132. mHPs.Remove(role.mData.UID);
  133. }
  134. else
  135. {
  136. mHPs[role.mData.UID].gameObject.SetActive(true);
  137. mHPs[role.mData.UID].UpdateHPProgress(progressVal);
  138. }
  139. }
  140. else
  141. {
  142. GameObject obj = null;
  143. if (role.mData.mIsHero)
  144. {
  145. obj = Instantiate(mHeroHPTemp, transform);
  146. }
  147. else
  148. {
  149. obj = Instantiate(mHPTemp, transform);
  150. }
  151. obj.SetActive(true);
  152. Hpbar hp = obj.AddComponent<Hpbar>();
  153. hp.Init(transform as RectTransform, role, progressVal);
  154. mHPs.Add(role.mData.UID, hp);
  155. }
  156. }
  157. /// <summary>
  158. /// 创建血条文字提示
  159. /// </summary>
  160. public void CreateHpTip(Role role, int val, bool isCrit, float weakness, bool updateUI = true)
  161. {
  162. if (val == 0)
  163. {
  164. return;
  165. }
  166. GameObject obj = Instantiate(mCirTipTemp, transform);
  167. obj.SetActive(true);
  168. HpbarTip tip = obj.AddComponent<HpbarTip>();
  169. // 加血
  170. if (val > 0)
  171. {
  172. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, Color.green);
  173. }
  174. // 掉血
  175. else
  176. {
  177. if (isCrit && weakness < 0.99f)
  178. {
  179. // 暴击 弱点
  180. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, new Color(1.0f, 0.5f, 0, 1.0f));
  181. }
  182. else if (isCrit && weakness > 1.0f)
  183. {
  184. // 暴击 抵抗
  185. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, new Color(0.6f, 0.6f, 0.6f, 1.0f));
  186. }
  187. else if (isCrit)
  188. {
  189. // 暴击(红)
  190. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Up, Color.red);
  191. }
  192. else if (weakness < 0.99f)
  193. {
  194. // 抵抗
  195. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Down, new Color(0.6f, 0.6f, 0.6f, 1.0f));
  196. }
  197. else if (weakness > 1.0f)
  198. {
  199. // 弱点
  200. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.High, new Color(1.0f, 0.5f, 0, 1.0f));
  201. }
  202. else
  203. {
  204. // 普通伤害
  205. if (role.mData.mIsHero)
  206. {
  207. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Default, Color.white);
  208. }
  209. else
  210. {
  211. tip.Init(transform as RectTransform, role, val, HpbarTip.HpTweenType.Default, Color.yellow);
  212. }
  213. }
  214. }
  215. if (role.IsHero && updateUI)
  216. {
  217. BattleCanvas.Instance.ShowPlayerHP(role.mData.HP_Final, role.mData.MaxHP_Final);
  218. }
  219. }
  220. /// <summary>
  221. /// /// <summary>
  222. /// 显示道具名称
  223. /// </summary>
  224. /// </summary>
  225. /// <param name="_target">目标</param>
  226. /// <param name="_name">名称</param>
  227. /// <param name="_quality">品质</param>
  228. public void ShowItemName(Transform _target, string _name, int _quality)
  229. {
  230. if (mItemNames.ContainsKey(_target))
  231. {
  232. mItemNames[_target].gameObject.SetActive(true);
  233. }
  234. else
  235. {
  236. GameObject obj = Instantiate(mItemNameTemp, transform);
  237. obj.SetActive(true);
  238. DropItemName itemName = obj.AddComponent<DropItemName>();
  239. itemName.Init(transform as RectTransform, _target, _name, _quality);
  240. mItemNames.Add(_target, itemName);
  241. }
  242. }
  243. /// <summary>
  244. /// 隐藏名字
  245. /// </summary>
  246. /// <param name="_target">目标</param>
  247. public void HideItemName(Transform _target)
  248. {
  249. if (mItemNames.ContainsKey(_target))
  250. {
  251. mItemNames[_target].gameObject.SetActive(false);
  252. }
  253. }
  254. /// <summary>
  255. /// 设置显示状态
  256. /// </summary>
  257. /// <param name="b"></param>
  258. public void SetShowState(bool b)
  259. {
  260. _canvas.enabled = b;
  261. }
  262. }