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. //
  69. // if (isUseSkill && _combatHeroEntity.CombatHeroSkillControl.currUseSkill !=
  70. // _combatHeroEntity.CombatHeroSkillControl.currCdSkill)
  71. // {
  72. // isUseSkill = false;
  73. // WidgetHeroTwenn.Play("skillFinish", false);
  74. // }
  75. float bl = _combatHeroEntity.CombatHeroSkillControl.currCdSkill.SkillCd /
  76. _combatHeroEntity.CombatHeroSkillControl.currCdSkill.SkillMaxCd;
  77. bl = 1 - Mathf.Clamp(bl, 0, 1);
  78. skillCdIcon.rectTransform.sizeDelta = new Vector2(134 * bl, skillCdIcon.rectTransform.sizeDelta.y);
  79. }
  80. private void UseSkill(IEventData eventData)
  81. {
  82. CombatUseSkillEventData combatUseSkillEventData = eventData as CombatUseSkillEventData;
  83. if (combatUseSkillEventData.useSkill.CombatHeroEntity.CurrCombatHeroInfo.modelID == heroInfo.modelID &&
  84. combatUseSkillEventData.useSkill.SelfSkillConfig.SkillType == 2)
  85. {
  86. isUseSkill = true;
  87. WidgetHeroTwenn.Play("skillShow", false);
  88. }
  89. }
  90. private void HeroResurrection(IEventData eventData)
  91. {
  92. HeroResurrectionEventData heroResurrectionEventData = eventData as HeroResurrectionEventData;
  93. if (this.heroInfo.modelID == heroResurrectionEventData.combatHeroEntity.CurrCombatHeroInfo.modelID)
  94. {
  95. UIManager.Instance.SetGray(own, false, true);
  96. }
  97. }
  98. private void HeroDie(IEventData eventData)
  99. {
  100. HeroDieEventData data = eventData as HeroDieEventData;
  101. if (this.heroInfo.modelID == data.combatHeroEntity.CurrCombatHeroInfo.modelID)
  102. {
  103. UIManager.Instance.SetGray(own, true, true);
  104. }
  105. }
  106. private void OnHeroPowerUp(IEventData eventData)
  107. {
  108. HeroPowerUpEventData data = eventData as HeroPowerUpEventData;
  109. if (data.upType == HeroUpType.BasicEquip)
  110. {
  111. return;
  112. }
  113. HeroInfo heroInfo = (HeroInfo)PlayerManager.Instance.heroController.GetHeroInfo(data.heroModelID);
  114. if (this.heroInfo.modelID == heroInfo.modelID)
  115. {
  116. UpdateWidgetUI(heroInfo);
  117. }
  118. }
  119. // private void HeroClickEvent(IEventData iEventData)
  120. // {
  121. // HeroClickEventData heroClickEventData = iEventData as HeroClickEventData;
  122. // if (heroClickEventData.heroId == heroInfo.modelID)
  123. // {
  124. // if (_isSelectHeroCame)
  125. // {
  126. // Button_came_icon.color = Color.white;
  127. // }
  128. // else
  129. // {
  130. // Button_came_icon.color = Color.green;
  131. // }
  132. //
  133. // _isSelectHeroCame = !_isSelectHeroCame;
  134. // }
  135. // else
  136. // {
  137. // if (_isSelectHeroCame)
  138. // {
  139. // Button_came_icon.color = Color.white;
  140. // }
  141. //
  142. // _isSelectHeroCame = false;
  143. // }
  144. // }
  145. private void OnUpgradeClick()
  146. {
  147. // throw new System.NotImplementedException();
  148. HeroUpResultType resultType = PlayerManager.Instance.heroController.UpgradeHeroLogic(heroInfo);
  149. //PlayerManager.Instance.heroController.CanUpgrade(heroInfo)
  150. if (resultType == HeroUpResultType.Success)
  151. {
  152. txtUpgrade.color = Color.white;
  153. }
  154. else
  155. {
  156. txtUpgrade.color = Color.red;
  157. }
  158. }
  159. private async void OnHeroPanelClick()
  160. {
  161. // throw new System.NotImplementedException();
  162. await OpenHeroDetailPanel();
  163. }
  164. public void SetMoreBtnActive(bool isActive)
  165. {
  166. btnUpgrade.gameObject.SetActive(isActive);
  167. btnHeroPanel.gameObject.SetActive(isActive);
  168. }
  169. private async void OnHeroClickCame()
  170. {
  171. HeroClickEventData heroClickEventData = HeroClickEventData.Create();
  172. heroClickEventData.heroId = heroInfo.modelID;
  173. EventManager.Instance.Dispatch(CustomEventType.HeroClick, heroClickEventData);
  174. }
  175. private async void OnHeroClick()
  176. {
  177. // OffsetPos();
  178. await OpenHeroDetailPanel();
  179. }
  180. private void OffsetPos()
  181. {
  182. Vector3 curPos = transform.parent.localPosition;
  183. Vector3 newPos;
  184. if (curPos.y == 0)
  185. {
  186. newPos = new Vector3(curPos.x, curPos.y + GlobalParam.Hero_Pos_Offset, curPos.z);
  187. SetMoreBtnActive(true);
  188. txtUpgrade.text = heroInfo.powerUpConfig.levelUpExp.ToStringEx();
  189. if (PlayerManager.Instance.heroController.CanUpgrade(heroInfo) == HeroUpResultType.Success)
  190. {
  191. txtUpgrade.color = Color.white;
  192. }
  193. else
  194. {
  195. txtUpgrade.color = Color.red;
  196. }
  197. }
  198. else
  199. {
  200. newPos = new Vector3(curPos.x, curPos.y - GlobalParam.Hero_Pos_Offset, curPos.z);
  201. SetMoreBtnActive(false);
  202. }
  203. transform.parent.localPosition = newPos;
  204. MainSceneController.Instance.mainUI?.RestWidgetHeroPos(this);
  205. }
  206. private async Task OpenHeroDetailPanel()
  207. {
  208. // HeroDetailPanel heroDetailPanel = UIManager.Instance.GetComponent<HeroDetailPanel>();
  209. // if (heroDetailPanel == null)
  210. // {
  211. // heroDetailPanel = await UIManager.Instance.LoadAndOpenPanel<HeroDetailPanel>(Callback);
  212. // }
  213. UIPanelName current = UIPanelName.MainPanel;
  214. HeroDetailPanel heroDetailPanel =
  215. await UIManager.Instance.LoadAndOpenPanel<HeroDetailPanel>(Callback, isFullUI: true);
  216. heroDetailPanel.InitHeroDetailPanel(this, current);
  217. }
  218. private void Callback(HeroDetailPanel obj)
  219. {
  220. LogTool.Log("HeroDetailPanel 加载完成");
  221. }
  222. /// <summary>
  223. ///
  224. /// </summary>
  225. /// <param name="heroInfo"></param>
  226. public void InitHero(HeroInfo heroInfo)
  227. {
  228. this.heroInfo = heroInfo;
  229. SetBasicData();
  230. SetDynamicData();
  231. }
  232. public void InitHeroForBag(HeroInfo heroInfo)
  233. {
  234. this.heroInfo = heroInfo;
  235. SetBasicData();
  236. SetDynamicData();
  237. // Button_came_icon.gameObject.SetActive(false);
  238. }
  239. private void SetBasicData()
  240. {
  241. iconHero.icon_name = heroInfo.modelConfig.headicon;
  242. iconZhiYe.icon_name = HeroUITools.GetZyIcon(heroInfo.modelConfig.profession);
  243. //heroInfo.iconZhiYe;
  244. }
  245. public void UpdateWidgetUI(HeroInfo heroInfo)
  246. {
  247. this.heroInfo = heroInfo;
  248. SetDynamicData();
  249. }
  250. public void SetDynamicData()
  251. {
  252. lv.text = heroInfo.level.Value.ToString();
  253. HeroUITools.SetStarShow(stars, heroInfo.star.Value);
  254. }
  255. }
  256. }