SentimentInfoPanel.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Core.Audio;
  4. using Core.Language;
  5. using Excel2Json;
  6. using Fort23.Core;
  7. using Fort23.UTool;
  8. using UnityEngine.UI;
  9. using Utility;
  10. namespace Fort23.Mono
  11. {
  12. [UIBinding(prefab = "SentimentInfoPanel")]
  13. public partial class SentimentInfoPanel : UIPanel
  14. {
  15. AccountFileInfo.SentimentProperty curretnSentimentProperty;
  16. // private EnergyWidget energyWidget;
  17. private AccountFileInfo.SentimentData sentimentData;
  18. List<SentimentEffectWidget> sentimentEffectWidgets = new List<SentimentEffectWidget>();
  19. private List<SentimentEffectConfig> _sentimentEffectConfigs;
  20. private List<SentimentEffectConfig> currentGroupSentimentEffectConfigs;
  21. public SentimentEffectWidget mainSentimentEffectWidget;
  22. private SentimentEffectWidget currentSentimentEffectWidget;
  23. private ItemWidgetType1 _itemWidgetType1;
  24. TitlePanel _titlePanel;
  25. private void Init()
  26. {
  27. isAddStack = true;
  28. }
  29. public async override CTask GetFocus()
  30. {
  31. AppBarPanel.OpenPanel(this);
  32. await base.GetFocus();
  33. }
  34. protected override void AddEvent()
  35. {
  36. }
  37. protected override void DelEvent()
  38. {
  39. }
  40. public override void AddButtonEvent()
  41. {
  42. Btn_Rest.onClick.AddListener(() =>
  43. {
  44. foreach (var sentimentDataSentimentProperty in sentimentData.sentimentProperties)
  45. {
  46. int count = 0;
  47. int itemid = 0;
  48. for (int i = 0; i < sentimentDataSentimentProperty.level; i++)
  49. {
  50. int level1 = sentimentData.sentimentProperties[0].level <= 0 ? 1 : sentimentData.sentimentProperties[0].level;
  51. int conFigId1 = sentimentData.sentimentProperties[0].groupId * 10 + level1;
  52. var sentimentEffectConfig1 = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId1);
  53. itemid = sentimentEffectConfig1.upConstItemId;
  54. count += sentimentEffectConfig1.upConstCount;
  55. }
  56. PlayerManager.Instance.BagController.AddItem(itemid, count);
  57. sentimentDataSentimentProperty.level = 0;
  58. }
  59. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  60. {
  61. sentimentEffectWidget.CustomInit(sentimentEffectWidget.sentimentProperty);
  62. }
  63. AccountFileInfo.Instance.SavePlayerData();
  64. });
  65. Btn_LingWu.onClick.AddListener(() =>
  66. {
  67. if (curretnSentimentProperty == null)
  68. {
  69. return;
  70. }
  71. if (currentSentimentEffectWidget.lastSentimentWidget != null && currentSentimentEffectWidget.lastSentimentWidget.sentimentProperty.level < currentSentimentEffectWidget.sentimentEffectConfig.unlockLevel)
  72. {
  73. TipMessagePanel.OpenTipMessagePanel("前置节点没有解锁");
  74. AudioManager.Instance.PlayAudio("ui_chaozuoshibai.wav");
  75. return;
  76. }
  77. if (curretnSentimentProperty.level >= currentGroupSentimentEffectConfigs.Count)
  78. {
  79. TipMessagePanel.OpenTipMessagePanel("已经达到最大等级");
  80. AudioManager.Instance.PlayAudio("ui_chaozuoshibai.wav");
  81. return;
  82. }
  83. int level = curretnSentimentProperty.level <= 0 ? 1 : curretnSentimentProperty.level;
  84. int conFigId = curretnSentimentProperty.groupId * 100 + level + 1;
  85. SentimentEffectConfig sentimentEffectConfig = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  86. if (PlayerManager.Instance.BagController.DeductItem(sentimentEffectConfig.upConstItemId, sentimentEffectConfig.upConstCount))
  87. {
  88. ItemSourcePanel.OpenPanel(sentimentEffectConfig.upConstItemId);
  89. AudioManager.Instance.PlayAudio("ui_chaozuoshibai.wav");
  90. return;
  91. }
  92. AudioManager.Instance.PlayAudio("ui_tycg.wav");
  93. curretnSentimentProperty.level++;
  94. AccountFileInfo.Instance.SavePlayerData();
  95. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  96. {
  97. sentimentEffectWidget.UpdateXian();
  98. }
  99. UpdateUi();
  100. currentSentimentEffectWidget.CustomInit(curretnSentimentProperty);
  101. });
  102. }
  103. public int MapNumber(int input)
  104. {
  105. if (input >= 1 && input <= 3)
  106. {
  107. return 0;
  108. }
  109. else if (input >= 4 && input <= 6)
  110. {
  111. return 1;
  112. }
  113. else if (input >= 7 && input <= 9)
  114. {
  115. return 2;
  116. }
  117. else
  118. {
  119. return -1;
  120. }
  121. }
  122. public async override CTask<bool> AsyncInit(object[] uiData)
  123. {
  124. sentimentData = uiData[0] as AccountFileInfo.SentimentData;
  125. _sentimentEffectConfigs = ConfigComponent.Instance.GetAll<SentimentEffectConfig>().ToList();
  126. mainSentimentEffectWidget = await UIManager.Instance.CreateGComponentForObject<SentimentEffectWidget>(MainSentimentEffectWidget, null);
  127. mainSentimentEffectWidget.CustomInit(sentimentData.mainSentiment);
  128. mainSentimentEffectWidget.OnClick = OnClick;
  129. int level1 = sentimentData.sentimentProperties[0].level <= 0 ? 1 : sentimentData.sentimentProperties[0].level;
  130. int conFigId1 = sentimentData.sentimentProperties[0].groupId * 10 + level1;
  131. var sentimentEffectConfig1 = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId1);
  132. if (_titlePanel == null)
  133. {
  134. _titlePanel = await TitlePanel.OpenPanel(new List<int>() { sentimentEffectConfig1.upConstItemId });
  135. }
  136. else
  137. {
  138. _titlePanel.CustomInit(new List<int>() { sentimentEffectConfig1.upConstItemId });
  139. }
  140. return await base.AsyncInit(uiData);
  141. }
  142. public async override CTask Show()
  143. {
  144. await base.Show();
  145. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  146. {
  147. UIManager.Instance.DormancyGComponent(sentimentEffectWidget);
  148. }
  149. sentimentEffectWidgets.Clear();
  150. foreach (var sentimentDataSentimentProperty in sentimentData.sentimentProperties)
  151. {
  152. int level = sentimentDataSentimentProperty.level <= 0 ? 1 : sentimentDataSentimentProperty.level;
  153. int conFigId = sentimentDataSentimentProperty.groupId * 10 + level;
  154. var sentimentEffectConfig = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  155. int index = MapNumber(sentimentEffectConfig.pos);
  156. SentimentEffectWidget sentimentEffectWidget1 = await UIManager.Instance.CreateGComponent<SentimentEffectWidget>(null, Root[index]);
  157. sentimentEffectWidget1.CustomInit(sentimentDataSentimentProperty);
  158. sentimentEffectWidget1.OnClick = OnClick;
  159. sentimentEffectWidgets.Add(sentimentEffectWidget1);
  160. if (currentSentimentEffectWidget == null)
  161. {
  162. sentimentEffectWidget1.OnPointerClick();
  163. }
  164. }
  165. foreach (var rectTransform in Root)
  166. {
  167. LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
  168. }
  169. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  170. {
  171. int level = sentimentEffectWidget.sentimentProperty.level <= 0 ? 1 : sentimentEffectWidget.sentimentProperty.level;
  172. int conFigId = sentimentEffectWidget.sentimentProperty.groupId * 10 + level;
  173. var sentimentEffectConfig = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  174. SentimentEffectWidget sentimentEffectWidget1 = null;
  175. if (sentimentEffectConfig.lastSentimentEffectId == -1)
  176. {
  177. sentimentEffectWidget1 = mainSentimentEffectWidget;
  178. }
  179. else
  180. {
  181. sentimentEffectWidget1 = sentimentEffectWidgets.FirstOrDefault(s => s.sentimentEffectConfig.groupId == sentimentEffectConfig.lastSentimentEffectId);
  182. }
  183. sentimentEffectWidget.CreatXian(XianRoot, sentimentEffectWidget1);
  184. }
  185. }
  186. private async void UpdateUi()
  187. {
  188. int level = curretnSentimentProperty.level <= 0 ? 1 : curretnSentimentProperty.level;
  189. int conFigId = curretnSentimentProperty.groupId * 10 + level;
  190. SentimentEffectConfig sentimentEffectConfig = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  191. currentGroupSentimentEffectConfigs = _sentimentEffectConfigs.Where(se => se.groupId == sentimentEffectConfig.groupId).ToList();
  192. Text_Name.text = LanguageManager.Instance.Text(sentimentEffectConfig.name);
  193. Text_Desc.text = UtilTools.GetString(LanguageManager.Instance.Text(sentimentEffectConfig.massge), sentimentEffectConfig.effectVale);
  194. UIManager.Instance.DormancyGComponent(_itemWidgetType1);
  195. _itemWidgetType1 = null;
  196. _itemWidgetType1 = await UIManager.Instance.CreateGComponentForObject<ItemWidgetType1>(ItemWidgetType1Gam, null);
  197. _itemWidgetType1.CustomInit(sentimentEffectConfig.upConstItemId, sentimentEffectConfig.upConstCount);
  198. if (curretnSentimentProperty.level >= currentGroupSentimentEffectConfigs.Count)
  199. {
  200. Text_CurrentLevel.text = $"{curretnSentimentProperty.level}级 ";
  201. Text_NextLevel.text = $"MAX级";
  202. }
  203. else
  204. {
  205. Text_CurrentLevel.text = $"{curretnSentimentProperty.level}级 ";
  206. Text_NextLevel.text = $"{curretnSentimentProperty.level + 1}级";
  207. }
  208. }
  209. private void OnClick(ItemWidgetBasic obj)
  210. {
  211. SentimentEffectWidget sentimentEffectWidget = obj as SentimentEffectWidget;
  212. currentSentimentEffectWidget = sentimentEffectWidget;
  213. curretnSentimentProperty = sentimentEffectWidget.sentimentProperty;
  214. Text_EffectName.text = LanguageManager.Instance.Text(sentimentEffectWidget.sentimentEffectConfig.name);
  215. UpdateUi();
  216. }
  217. public static async CTask OpenPanel(AccountFileInfo.SentimentData sentimentData)
  218. {
  219. await UIManager.Instance.LoadAndOpenPanel<SentimentInfoPanel>(null, uiData: new object[] { sentimentData });
  220. }
  221. public async override CTask Close()
  222. {
  223. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  224. {
  225. UIManager.Instance.DormancyGComponent(sentimentEffectWidget);
  226. }
  227. sentimentEffectWidgets.Clear();
  228. currentSentimentEffectWidget = null;
  229. curretnSentimentProperty = null;
  230. // UIManager.Instance.DormancyGComponent(energyWidget);
  231. // energyWidget = null;
  232. await base.Close();
  233. }
  234. }
  235. }