WidgetHero.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. using System.Threading.Tasks;
  2. using Common.Utility.CombatEvent;
  3. using Core.Utility;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using GameLogic.Combat.CombatTool;
  7. using GameLogic.Hero;
  8. using UnityEngine;
  9. using UnityEngine.UI;
  10. using Utility;
  11. namespace Fort23.Mono
  12. {
  13. [UIBinding(prefab = "WidgetHero")]
  14. public partial class WidgetHero : UIComponent
  15. {
  16. private bool _isSelectHeroCame;
  17. public HeroInfo heroInfo;
  18. private CombatHeroEntity _combatHeroEntity;
  19. private bool isUseSkill;
  20. private void Init()
  21. {
  22. SetMoreBtnActive(false);
  23. }
  24. public override void AddEvent()
  25. {
  26. // EventManager.Instance.AddEventListener(CustomEventType.HeroClick, HeroClickEvent);
  27. EventManager.Instance.AddEventListener(CustomEventType.HeroPowerUp, OnHeroPowerUp);
  28. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroDie, HeroDie);
  29. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroResurrection, HeroResurrection);
  30. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroResurrection, HeroResurrection);
  31. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);
  32. StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
  33. }
  34. public override void DelEvent()
  35. {
  36. // EventManager.Instance.RemoveEventListener(CustomEventType.HeroClick, HeroClickEvent);
  37. EventManager.Instance.RemoveEventListener(CustomEventType.HeroPowerUp, OnHeroPowerUp);
  38. CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroDie, HeroDie);
  39. CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroResurrection, HeroResurrection);
  40. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);
  41. StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);
  42. _combatHeroEntity = null;
  43. }
  44. public override void AddButtonEvent()
  45. {
  46. // LogTool.Log("添加英雄点击事件");
  47. btnHero.onClick.AddListener(OnHeroClick);
  48. btnUpgrade.onClick.AddListener(OnUpgradeClick);
  49. btnHeroPanel.onClick.AddListener(OnHeroPanelClick);
  50. Button_came.onClick.AddListener(OnHeroClickCame);
  51. }
  52. private void Update()
  53. {
  54. if (heroInfo == null || CombatController.currActiveCombat == null ||
  55. CombatController.currActiveCombat.CombatHeroController == null)
  56. {
  57. return;
  58. }
  59. if (_combatHeroEntity == null)
  60. {
  61. _combatHeroEntity =
  62. CombatController.currActiveCombat.CombatHeroController.GetHeroForId(heroInfo.modelID);
  63. }
  64. if (_combatHeroEntity == null || _combatHeroEntity.CombatHeroSkillControl.currCdSkill == null)
  65. {
  66. return;
  67. }
  68. if (isUseSkill && _combatHeroEntity.CombatHeroSkillControl.currUseSkill !=
  69. _combatHeroEntity.CombatHeroSkillControl.currCdSkill)
  70. {
  71. isUseSkill = false;
  72. WidgetHeroTwenn.Play("skillFinish", false);
  73. }
  74. float bl = _combatHeroEntity.CombatHeroSkillControl.currCdSkill.SkillCd /
  75. _combatHeroEntity.CombatHeroSkillControl.currCdSkill.SkillMaxCd;
  76. bl = 1 - Mathf.Clamp(bl, 0, 1);
  77. skillCdIcon.rectTransform.sizeDelta = new Vector2(134 * bl, skillCdIcon.rectTransform.sizeDelta.y);
  78. }
  79. private void UseSkill(IEventData eventData)
  80. {
  81. CombatUseSkillEventData combatUseSkillEventData = eventData as CombatUseSkillEventData;
  82. if (combatUseSkillEventData.useSkill.CombatHeroEntity.CurrCombatHeroInfo.modelID == heroInfo.modelID &&
  83. combatUseSkillEventData.useSkill.SelfSkillConfig.SkillType == 2)
  84. {
  85. isUseSkill = true;
  86. WidgetHeroTwenn.Play("skillShow", false);
  87. }
  88. }
  89. private void HeroResurrection(IEventData eventData)
  90. {
  91. HeroResurrectionEventData heroResurrectionEventData = eventData as HeroResurrectionEventData;
  92. if (this.heroInfo.modelID == heroResurrectionEventData.combatHeroEntity.CurrCombatHeroInfo.modelID)
  93. {
  94. UIManager.Instance.SetGray(own, false, true);
  95. }
  96. }
  97. private void HeroDie(IEventData eventData)
  98. {
  99. HeroDieEventData data = eventData as HeroDieEventData;
  100. if (this.heroInfo.modelID == data.combatHeroEntity.CurrCombatHeroInfo.modelID)
  101. {
  102. UIManager.Instance.SetGray(own, true, true);
  103. }
  104. }
  105. private void OnHeroPowerUp(IEventData eventData)
  106. {
  107. HeroPowerUpEventData data = eventData as HeroPowerUpEventData;
  108. if (data.upType == HeroUpType.BasicEquip)
  109. {
  110. return;
  111. }
  112. HeroInfo heroInfo = (HeroInfo)PlayerManager.Instance.heroController.GetHeroInfo(data.heroModelID);
  113. if (this.heroInfo.modelID == heroInfo.modelID)
  114. {
  115. UpdateWidgetUI(heroInfo);
  116. }
  117. }
  118. // private void HeroClickEvent(IEventData iEventData)
  119. // {
  120. // HeroClickEventData heroClickEventData = iEventData as HeroClickEventData;
  121. // if (heroClickEventData.heroId == heroInfo.modelID)
  122. // {
  123. // if (_isSelectHeroCame)
  124. // {
  125. // Button_came_icon.color = Color.white;
  126. // }
  127. // else
  128. // {
  129. // Button_came_icon.color = Color.green;
  130. // }
  131. //
  132. // _isSelectHeroCame = !_isSelectHeroCame;
  133. // }
  134. // else
  135. // {
  136. // if (_isSelectHeroCame)
  137. // {
  138. // Button_came_icon.color = Color.white;
  139. // }
  140. //
  141. // _isSelectHeroCame = false;
  142. // }
  143. // }
  144. private void OnUpgradeClick()
  145. {
  146. // throw new System.NotImplementedException();
  147. HeroUpResultType resultType = PlayerManager.Instance.heroController.UpgradeHeroLogic(heroInfo);
  148. //PlayerManager.Instance.heroController.CanUpgrade(heroInfo)
  149. if (resultType == HeroUpResultType.Success)
  150. {
  151. txtUpgrade.color = Color.white;
  152. }
  153. else
  154. {
  155. txtUpgrade.color = Color.red;
  156. }
  157. }
  158. private async void OnHeroPanelClick()
  159. {
  160. // throw new System.NotImplementedException();
  161. await OpenHeroDetailPanel();
  162. }
  163. public void SetMoreBtnActive(bool isActive)
  164. {
  165. btnUpgrade.gameObject.SetActive(isActive);
  166. btnHeroPanel.gameObject.SetActive(isActive);
  167. }
  168. private async void OnHeroClickCame()
  169. {
  170. HeroClickEventData heroClickEventData = HeroClickEventData.Create();
  171. heroClickEventData.heroId = heroInfo.modelID;
  172. EventManager.Instance.Dispatch(CustomEventType.HeroClick, heroClickEventData);
  173. }
  174. private async void OnHeroClick()
  175. {
  176. // OffsetPos();
  177. await OpenHeroDetailPanel();
  178. }
  179. private void OffsetPos()
  180. {
  181. Vector3 curPos = transform.parent.localPosition;
  182. Vector3 newPos;
  183. if (curPos.y == 0)
  184. {
  185. newPos = new Vector3(curPos.x, curPos.y + GlobalParam.Hero_Pos_Offset, curPos.z);
  186. SetMoreBtnActive(true);
  187. txtUpgrade.text = heroInfo.powerUpConfig.levelUpExp.ToStringEx();
  188. if (PlayerManager.Instance.heroController.CanUpgrade(heroInfo) == HeroUpResultType.Success)
  189. {
  190. txtUpgrade.color = Color.white;
  191. }
  192. else
  193. {
  194. txtUpgrade.color = Color.red;
  195. }
  196. }
  197. else
  198. {
  199. newPos = new Vector3(curPos.x, curPos.y - GlobalParam.Hero_Pos_Offset, curPos.z);
  200. SetMoreBtnActive(false);
  201. }
  202. transform.parent.localPosition = newPos;
  203. MainSceneController.Instance.mainUI?.RestWidgetHeroPos(this);
  204. }
  205. private async Task OpenHeroDetailPanel()
  206. {
  207. // HeroDetailPanel heroDetailPanel = UIManager.Instance.GetComponent<HeroDetailPanel>();
  208. // if (heroDetailPanel == null)
  209. // {
  210. // heroDetailPanel = await UIManager.Instance.LoadAndOpenPanel<HeroDetailPanel>(Callback);
  211. // }
  212. UIPanelName current = UIPanelName.MainPanel;
  213. HeroDetailPanel heroDetailPanel =
  214. await UIManager.Instance.LoadAndOpenPanel<HeroDetailPanel>(Callback, isFullUI: true);
  215. heroDetailPanel.InitHeroDetailPanel(this, current);
  216. }
  217. private void Callback(HeroDetailPanel obj)
  218. {
  219. LogTool.Log("HeroDetailPanel 加载完成");
  220. }
  221. /// <summary>
  222. ///
  223. /// </summary>
  224. /// <param name="heroInfo"></param>
  225. public void InitHero(HeroInfo heroInfo)
  226. {
  227. this.heroInfo = heroInfo;
  228. SetBasicData();
  229. SetDynamicData();
  230. }
  231. public void InitHeroForBag(HeroInfo heroInfo)
  232. {
  233. this.heroInfo = heroInfo;
  234. SetBasicData();
  235. SetDynamicData();
  236. // Button_came_icon.gameObject.SetActive(false);
  237. }
  238. private void SetBasicData()
  239. {
  240. iconHero.icon_name = heroInfo.modelConfig.headicon;
  241. iconZhiYe.icon_name = HeroUITools.GetZyIcon(heroInfo.modelConfig.profession);
  242. //heroInfo.iconZhiYe;
  243. }
  244. public void UpdateWidgetUI(HeroInfo heroInfo)
  245. {
  246. this.heroInfo = heroInfo;
  247. SetDynamicData();
  248. }
  249. public void SetDynamicData()
  250. {
  251. lv.text = heroInfo.level.Value.ToString();
  252. HeroUITools.SetStarShow(stars, heroInfo.star.Value);
  253. }
  254. }
  255. }