MainUIPanel.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using Common.Utility.CombatEvent;
  4. using Core.Utility;
  5. using Excel2Json;
  6. using Fort23.Core;
  7. using Fort23.UTool;
  8. using GameLogic.Bag;
  9. using GameLogic.Combat.CombatTool;
  10. using GameLogic.Combat.CombatType;
  11. using GameLogic.Hero;
  12. using UnityEngine;
  13. using Utility;
  14. namespace Fort23.Mono
  15. {
  16. [UIBinding(prefab = "MainUIPanel")]
  17. public partial class MainUIPanel : UIPanel
  18. {
  19. private CombatHeroEntity bossHeroEntity;
  20. private void Init()
  21. {
  22. InitRes();
  23. InitBattleHeroWidget();
  24. LevelUpdate(null);
  25. }
  26. protected override void AddEvent()
  27. {
  28. CombatEventManager.Instance.AddEventListener(CombatEventType.CombatExpAlter, CombatExpAlter);
  29. // EventManager.Instance.AddEventListener(CustomEventType.HeroPowerUp, OnHeroPowerUp);
  30. EventManager.Instance.AddEventListener(CustomEventType.ItemUpdate, OnItemUpdate);
  31. EventManager.Instance.AddEventListener(CustomEventType.ShowBossHp, ShowBossHp);
  32. EventManager.Instance.AddEventListener(CustomEventType.LevelUpdate, LevelUpdate);
  33. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData);
  34. EventManager.Instance.AddEventListener(CustomEventType.ShowBattleExp, ShowBattleExp);
  35. EventManager.Instance.AddEventListener(CustomEventType.StartBossBattle, StartBossBattle);
  36. EventManager.Instance.AddEventListener(CustomEventType.ShowDialogue, ShowDialogue);
  37. EventManager.Instance.AddEventListener(CustomEventType.AlterCombatHero, AlterCombatHero);
  38. EventManager.Instance.AddEventListener(CustomEventType.PlayerUseSkill, PlayerUseSkill);
  39. }
  40. private void PlayerUseSkill(IEventData iEventData)
  41. {
  42. Button_huiQiu_tween.Play("show", false);
  43. }
  44. private void StartBossBattle(IEventData iEventData)
  45. {
  46. UIManager.Instance.LoadAndOpenPanel<StartBossPanel>(null, UILayer.Middle);
  47. }
  48. private void ShowDialogue(IEventData iEventData)
  49. {
  50. ShowDialogueEventData dialogueData = iEventData as ShowDialogueEventData;
  51. string[] dialogueMessaga = dialogueData.dialogueMessaga;
  52. string[] icon = dialogueData.icon;
  53. System.Action finis = dialogueData.finish;
  54. ShowDialogueEventData.MessageShowType messageShowTyp = dialogueData.messageShowType;
  55. DialoguePanel.OpenDialoguePanel(dialogueMessaga, icon, messageShowTyp, finis);
  56. }
  57. private void ShowBattleExp(IEventData iEventData)
  58. {
  59. bossHp.SetActive(false);
  60. Slider_Exp_Process.SetActive(true);
  61. bossHeroEntity = null;
  62. }
  63. private void HeroHpUpdateEventData(IEventData iEventData)
  64. {
  65. HeroHpUpdateEventData heroHpUpdateEventData = iEventData as HeroHpUpdateEventData;
  66. if (heroHpUpdateEventData.combatHeroEntity == bossHeroEntity)
  67. {
  68. UpdateBossHp();
  69. }
  70. }
  71. protected override void DelEvent()
  72. {
  73. CombatEventManager.Instance.RemoveEventListener(CombatEventType.CombatExpAlter, CombatExpAlter);
  74. // EventManager.Instance.RemoveEventListener(CustomEventType.HeroPowerUp, OnHeroPowerUp);
  75. EventManager.Instance.RemoveEventListener(CustomEventType.ItemUpdate, OnItemUpdate);
  76. EventManager.Instance.RemoveEventListener(CustomEventType.ShowBossHp, ShowBossHp);
  77. EventManager.Instance.RemoveEventListener(CustomEventType.LevelUpdate, LevelUpdate);
  78. CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData);
  79. EventManager.Instance.RemoveEventListener(CustomEventType.ShowBattleExp, ShowBattleExp);
  80. EventManager.Instance.RemoveEventListener(CustomEventType.ShowDialogue, ShowDialogue);
  81. EventManager.Instance.RemoveEventListener(CustomEventType.AlterCombatHero, AlterCombatHero);
  82. }
  83. public override void AddButtonEvent()
  84. {
  85. btnHeroBag.onClick.AddListener(OnClickHeroBag);
  86. Button_battleBoss.onClick.AddListener(OnClickButtonBattleBoss);
  87. box.onClick.AddListener(OnOpenBox);
  88. Button_huiQiu.onClick.AddListener(OnClickPlayerSkill);
  89. }
  90. private void OnOpenBox()
  91. {
  92. BoxPanel.OpenBoxPanel();
  93. }
  94. private async void OnClickButtonBattleBoss()
  95. {
  96. if (AccountFileInfo.Instance.playerData.isAllHeroDie)
  97. {
  98. LevelBattleCombatType levelBattleCombatType =
  99. CombatController.currActiveCombat.CombatTypeBasic as LevelBattleCombatType;
  100. levelBattleCombatType.StartBossCombat();
  101. Button_battleBoss.gameObject.SetActive(false);
  102. }
  103. }
  104. private async void OnClickPlayerSkill()
  105. {
  106. Debug.Log("显示描述");
  107. RectTransform huoQiu = Button_huiQiu.GetComponent<RectTransform>();
  108. TipMessagePanel.OpenTipMessagePanel("点击屏幕空白处从天空中召唤一个陨石,对怪物造成1点伤害,并有70%概率获得1枚金币(boss怪必定掉落,金币数量+2)",
  109. new Vector2(huoQiu.position.x, huoQiu.position.y + 0.5f));
  110. }
  111. private async void OnClickHeroBag()
  112. {
  113. HeroBagPanel heroBagPanel = await UIManager.Instance.LoadAndOpenPanel<HeroBagPanel>(null, isFullUI: true);
  114. heroBagPanel.InitPanel();
  115. }
  116. private void AlterCombatHero(IEventData e)
  117. {
  118. InitHeroWidget();
  119. }
  120. private void OnItemUpdate(IEventData e)
  121. {
  122. ItemUpdateData data = e as ItemUpdateData;
  123. if (data.ItemInfo.itemID == GlobalParam.Item_Coin_ID)
  124. {
  125. txtCoin.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Coin_ID).count.Value.ToStringEx();
  126. }
  127. else if (data.ItemInfo.itemID == GlobalParam.Item_Diamond_ID)
  128. {
  129. txtDiamond.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Diamond_ID).count.Value
  130. .ToStringEx();
  131. }
  132. else if (data.ItemInfo.itemID == GlobalParam.Item_HeroExp_ID)
  133. {
  134. txtHeroExp.text = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value
  135. .ToStringEx();
  136. }
  137. }
  138. private void LevelUpdate(IEventData eventData)
  139. {
  140. int levelBattle = AccountFileInfo.Instance.playerData.levelBattle;
  141. LevelBattleConfig levelBattleConfig = ConfigComponent.Instance.Get<LevelBattleConfig>(levelBattle);
  142. levelName.text = levelBattleConfig.levelName;
  143. }
  144. private void ShowBossHp(IEventData eventData)
  145. {
  146. ShowBossHpEventData showBossHpEventData = eventData as ShowBossHpEventData;
  147. bossHeroEntity = showBossHpEventData.boss;
  148. bossHp.SetActive(true);
  149. Slider_Exp_Process.SetActive(false);
  150. bossName.text = bossHeroEntity.CurrCombatHeroInfo.heroName;
  151. UpdateBossHp();
  152. }
  153. protected void UpdateBossHp()
  154. {
  155. Slider_Hp_Boss.value = bossHeroEntity.CurrCombatHeroInfo.hp.Value * 1.0f /
  156. bossHeroEntity.MaxCombatHeroInfo.hp.Value;
  157. }
  158. private void CombatExpAlter(IEventData eventData)
  159. {
  160. ExpAlter();
  161. }
  162. private void ExpAlter()
  163. {
  164. if (CombatController.currActiveCombat == null || CombatController.currActiveCombat.CombatTypeBasic == null)
  165. {
  166. return;
  167. }
  168. LevelBattleCombatType levelBattleCombatType =
  169. CombatController.currActiveCombat.CombatTypeBasic as LevelBattleCombatType;
  170. float bl = (levelBattleCombatType.exp * 1.0f) / levelBattleCombatType.CurrMaxExp;
  171. exp.value = bl;
  172. TextExp.text = levelBattleCombatType.exp + "/" + levelBattleCombatType.CurrMaxExp;
  173. if (levelBattleCombatType.exp >= levelBattleCombatType.CurrMaxExp) // 到达目标值,开始打boss
  174. {
  175. if (!levelBattleCombatType.isBossCombat && AccountFileInfo.Instance.playerData.isAllHeroDie)
  176. {
  177. Button_battleBoss.gameObject.SetActive(true);
  178. }
  179. }
  180. else
  181. {
  182. Button_battleBoss.gameObject.SetActive(false);
  183. }
  184. }
  185. // private void OnHeroPowerUp(IEventData eventData)
  186. // {
  187. // HeroPowerUpEventData data = eventData as HeroPowerUpEventData;
  188. // HeroInfo heroInfo = (HeroInfo)PlayerManager.Instance.heroController.GetHeroInfo(data.heroModelID);
  189. //
  190. // foreach (WidgetHero widgetHero in widgetHeroes)
  191. // {
  192. // if (widgetHero.heroInfo.modelID == heroInfo.modelID)
  193. // {
  194. // widgetHero.UpdateWidgetUI(heroInfo);
  195. // break;
  196. // }
  197. // }
  198. // }
  199. public List<WidgetHero> widgetHeroes = new List<WidgetHero>();
  200. /// <summary>
  201. /// 把主界面的几个英雄UI归位
  202. /// </summary>
  203. /// <param name="wh"></param>
  204. public void RestWidgetHeroPos(WidgetHero wh)
  205. {
  206. Vector3 v;
  207. Vector3 origin;
  208. foreach (WidgetHero w in widgetHeroes)
  209. {
  210. if (wh != null && w.Equals(wh))
  211. {
  212. continue;
  213. }
  214. v = w.transform.parent.localPosition;
  215. if (v.y > 0)
  216. {
  217. origin = new Vector3(v.x, 0, v.z);
  218. w.transform.parent.localPosition = origin;
  219. w.SetMoreBtnActive(false);
  220. }
  221. }
  222. }
  223. private async void InitBattleHeroWidget()
  224. {
  225. Button_battleBoss.gameObject.SetActive(false);
  226. InitHeroWidget();
  227. }
  228. private async void InitHeroWidget()
  229. {
  230. widgetHeroes.Clear();
  231. int i = 0;
  232. foreach (KeyValuePair<int, HeroInfo> keyValuePair in PlayerManager.Instance.heroController.heroDicInLead)
  233. {
  234. RectTransform rectTransform = hero_battle[i] as RectTransform;
  235. WidgetHero itemHero = await UIManager.Instance.CreateGComponent<WidgetHero>(null,
  236. poolName: "WidgetHero", root: rectTransform);
  237. itemHero.InitHero(keyValuePair.Value);
  238. widgetHeroes.Add(itemHero);
  239. i++;
  240. }
  241. }
  242. private void InitRes()
  243. {
  244. txtDiamond.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Diamond_ID).count.Value.ToStringEx();
  245. txtCoin.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Coin_ID).count.Value.ToStringEx();
  246. txtHeroExp.text = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value.ToStringEx();
  247. }
  248. }
  249. }