MainHeroPanel.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. using System.Collections.Generic;
  2. using Animancer;
  3. using Animancer.TransitionLibraries;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using GameLogic.Hero;
  7. using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
  8. using UnityEngine;
  9. namespace Fort23.Mono
  10. {
  11. [UIBinding(prefab = "MainHeroPanel")]
  12. public partial class MainHeroPanel : UIPanel
  13. {
  14. List<BtnFaBaoWidget> btnFaBaoWidgets = new List<BtnFaBaoWidget>();
  15. private GameObjectPool modelObj;
  16. private void Init()
  17. {
  18. isAddStack = true;
  19. IsShowAppBar = true;
  20. }
  21. protected override void AddEvent()
  22. {
  23. }
  24. protected override void DelEvent()
  25. {
  26. }
  27. public override CTask GetFocus()
  28. {
  29. AppBarPanel.OpenPanel(this);
  30. return base.GetFocus();
  31. }
  32. public override CTask LoseFocus()
  33. {
  34. // AppBarPanel.ClosePanel();
  35. return base.LoseFocus();
  36. }
  37. private HeroInfo heroInfo;
  38. private List<HeroAttributeWidget> HeroAttributeWidgets = new List<HeroAttributeWidget>();
  39. public override void AddButtonEvent()
  40. {
  41. Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  42. Btn_Sentiment.onClick.AddListener(() => { SentimentPanel.OpenPanel(); });
  43. }
  44. private async CTask CreatHero()
  45. {
  46. modelObj = await GObjectPool.Instance.FetchAsync<GameObjectPool>(PlayerManager.Instance.myHero.modelConfig.model + ".prefab", null);
  47. modelObj.own.transform.parent = CameraRoot;
  48. modelObj.own.transform.localEulerAngles = new Vector3(0, 180, 0);
  49. modelObj.own.transform.localPosition = new Vector3(0, -132, 854);
  50. modelObj.own.transform.localScale = Vector3.one * 330;
  51. ChangeLayerRecursively(modelObj.own, LayerMask.NameToLayer("UiModle"));
  52. var modelAnimComponent = modelObj.own.GetComponent<AnimancerComponent>();
  53. int max = modelAnimComponent.Transitions.Library.Count;
  54. for (int i = 0; i < max; i++)
  55. {
  56. if (modelAnimComponent.Transitions.Library.TryGetTransition(i,
  57. out TransitionModifierGroup transition))
  58. {
  59. var modelIdleClip = transition.Transition as TransitionAsset;
  60. if (modelIdleClip != null && modelIdleClip.name == "idle")
  61. {
  62. modelAnimComponent.Play(modelIdleClip);
  63. break;
  64. }
  65. }
  66. }
  67. }
  68. public void ChangeLayerRecursively(GameObject obj, int newLayer)
  69. {
  70. if (obj == null || obj.layer == newLayer) return;
  71. // 修改当前对象的 Layer
  72. obj.layer = newLayer;
  73. // 遍历所有子对象,递归修改
  74. foreach (Transform child in obj.transform)
  75. {
  76. ChangeLayerRecursively(child.gameObject, newLayer);
  77. }
  78. }
  79. public override CTask<bool> AsyncInit(object[] uiData)
  80. {
  81. CreatHero();
  82. return base.AsyncInit(uiData);
  83. }
  84. public async void CustomInit()
  85. {
  86. for (int i = 0; i < 4; i++)
  87. {
  88. BtnFaBaoWidget btnFaBaoWidget =
  89. await UIManager.Instance.CreateGComponent<BtnFaBaoWidget>(null, FaBaoRoot);
  90. btnFaBaoWidget.CustomInit(i);
  91. btnFaBaoWidget.OnClick = OnClick;
  92. btnFaBaoWidgets.Add(btnFaBaoWidget);
  93. }
  94. heroInfo = PlayerManager.Instance.myHero;
  95. HeroAttributeWidget heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  96. heroAttributeWidget.CustomInit(new HeroAttributeData("生命", "", PlayerManager.Instance.myHero.hp.Value.ToString()));
  97. HeroAttributeWidgets.Add(heroAttributeWidget);
  98. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  99. heroAttributeWidget.CustomInit(new HeroAttributeData("攻击", "", PlayerManager.Instance.myHero.attack.Value.ToString()));
  100. HeroAttributeWidgets.Add(heroAttributeWidget);
  101. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  102. heroAttributeWidget.CustomInit(new HeroAttributeData("防御", "", PlayerManager.Instance.myHero.defense.Value.ToString()));
  103. HeroAttributeWidgets.Add(heroAttributeWidget);
  104. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  105. heroAttributeWidget.CustomInit(new HeroAttributeData("攻击速度", "", PlayerManager.Instance.myHero.attSpeed.Value.ToString()));
  106. HeroAttributeWidgets.Add(heroAttributeWidget);
  107. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  108. heroAttributeWidget.CustomInit(new HeroAttributeData("金灵根", "", PlayerManager.Instance.myHero.Metal_Injury.ToString()));
  109. HeroAttributeWidgets.Add(heroAttributeWidget);
  110. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  111. heroAttributeWidget.CustomInit(new HeroAttributeData("木灵根", "", PlayerManager.Instance.myHero.Wood_Injury.ToString()));
  112. HeroAttributeWidgets.Add(heroAttributeWidget);
  113. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  114. heroAttributeWidget.CustomInit(new HeroAttributeData("水灵根", "", PlayerManager.Instance.myHero.Water_Injury.ToString()));
  115. HeroAttributeWidgets.Add(heroAttributeWidget);
  116. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  117. heroAttributeWidget.CustomInit(new HeroAttributeData("火灵根", "", PlayerManager.Instance.myHero.Fire_Injury.ToString()));
  118. HeroAttributeWidgets.Add(heroAttributeWidget);
  119. heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
  120. heroAttributeWidget.CustomInit(new HeroAttributeData("土灵根", "", PlayerManager.Instance.myHero.Earth_Injury.ToString()));
  121. HeroAttributeWidgets.Add(heroAttributeWidget);
  122. }
  123. private async void OnClick(ItemWidgetBasic obj)
  124. {
  125. BtnFaBaoWidget btnFaBaoWidget = obj as BtnFaBaoWidget;
  126. if (btnFaBaoWidget.index > PlayerManager.Instance.myHero.powerUpConfig.MaxFabaoNum - 1)
  127. {
  128. TipMessagePanel.OpenTipMessagePanel("当前位置未解锁");
  129. return;
  130. }
  131. SelectFaBaoPanel selectFaBaoPanel = await SelectFaBaoPanel.OpenPanel(btnFaBaoWidget.index);
  132. await selectFaBaoPanel.UIClosed();
  133. foreach (var b in btnFaBaoWidgets)
  134. {
  135. b.CustomInit(b.index);
  136. }
  137. }
  138. public async static CTask<MainHeroPanel> OpenPanel()
  139. {
  140. MainHeroPanel mainHeroPanel = await UIManager.Instance.LoadAndOpenPanel<MainHeroPanel>(null);
  141. mainHeroPanel.CustomInit();
  142. return mainHeroPanel;
  143. }
  144. public override void Close()
  145. {
  146. UIManager.Instance.DormancyGComponent(modelObj);
  147. modelObj = null;
  148. foreach (var btnFaBaoWidget in btnFaBaoWidgets)
  149. {
  150. UIManager.Instance.DormancyGComponent(btnFaBaoWidget);
  151. }
  152. btnFaBaoWidgets.Clear();
  153. foreach (var heroAttributeWidget in HeroAttributeWidgets)
  154. {
  155. UIManager.Instance.DormancyGComponent(heroAttributeWidget);
  156. }
  157. HeroAttributeWidgets.Clear();
  158. base.Close();
  159. }
  160. }
  161. }