SentimentInfoPanel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  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
  51. ? 1
  52. : sentimentData.sentimentProperties[0].level;
  53. int conFigId1 = sentimentData.sentimentProperties[0].groupId * 10 + level1;
  54. var sentimentEffectConfig1 = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId1);
  55. itemid = sentimentEffectConfig1.upConstItemId;
  56. count += sentimentEffectConfig1.upConstCount;
  57. }
  58. PlayerManager.Instance.BagController.AddItem(itemid, count);
  59. sentimentDataSentimentProperty.level = 0;
  60. }
  61. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  62. {
  63. sentimentEffectWidget.CustomInit(sentimentEffectWidget.sentimentProperty);
  64. }
  65. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  66. {
  67. sentimentEffectWidget.UpdateXian();
  68. }
  69. UpdateRestBtn();
  70. AccountFileInfo.Instance.SavePlayerData();
  71. });
  72. Btn_LingWu.onClick.AddListener(() =>
  73. {
  74. if (curretnSentimentProperty == null)
  75. {
  76. return;
  77. }
  78. if (currentSentimentEffectWidget.lastSentimentWidget != null &&
  79. currentSentimentEffectWidget.lastSentimentWidget.sentimentProperty.level <
  80. currentSentimentEffectWidget.sentimentEffectConfig.unlockLevel)
  81. {
  82. TipMessagePanel.OpenTipMessagePanel("前置节点没有解锁");
  83. AudioManager.Instance.PlayAudio("ui_chaozuoshibai.wav");
  84. return;
  85. }
  86. if (curretnSentimentProperty.level >= currentGroupSentimentEffectConfigs.Count)
  87. {
  88. TipMessagePanel.OpenTipMessagePanel("已经达到最大等级");
  89. AudioManager.Instance.PlayAudio("ui_chaozuoshibai.wav");
  90. return;
  91. }
  92. int level = curretnSentimentProperty.level <= 0 ? 1 : curretnSentimentProperty.level;
  93. int conFigId = curretnSentimentProperty.groupId * 10 + level;
  94. SentimentEffectConfig sentimentEffectConfig =
  95. ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  96. if (!PlayerManager.Instance.BagController.DeductItem(sentimentEffectConfig.upConstItemId,
  97. sentimentEffectConfig.upConstCount))
  98. {
  99. ItemSourcePanel.OpenPanel(sentimentEffectConfig.upConstItemId);
  100. AudioManager.Instance.PlayAudio("ui_chaozuoshibai.wav");
  101. return;
  102. }
  103. AudioManager.Instance.PlayAudio("ui_tycg.wav");
  104. curretnSentimentProperty.level++;
  105. AccountFileInfo.Instance.SavePlayerData();
  106. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  107. {
  108. sentimentEffectWidget.UpdateXian();
  109. }
  110. UpdateRestBtn();
  111. UpdateUi();
  112. currentSentimentEffectWidget.CustomInit(curretnSentimentProperty);
  113. });
  114. }
  115. public int MapNumber(int input)
  116. {
  117. if (input >= 1 && input <= 3)
  118. {
  119. return 0;
  120. }
  121. else if (input >= 4 && input <= 6)
  122. {
  123. return 1;
  124. }
  125. else if (input >= 7 && input <= 9)
  126. {
  127. return 2;
  128. }
  129. else
  130. {
  131. return -1;
  132. }
  133. }
  134. public async override CTask<bool> AsyncInit(object[] uiData)
  135. {
  136. sentimentData = uiData[0] as AccountFileInfo.SentimentData;
  137. _sentimentEffectConfigs = ConfigComponent.Instance.GetAll<SentimentEffectConfig>().ToList();
  138. mainSentimentEffectWidget =
  139. await UIManager.Instance.CreateGComponentForObject<SentimentEffectWidget>(MainSentimentEffectWidget,
  140. null);
  141. mainSentimentEffectWidget.CustomInit(sentimentData.mainSentiment);
  142. mainSentimentEffectWidget.OnClick = OnClick;
  143. int level1 = sentimentData.sentimentProperties[0].level <= 0
  144. ? 1
  145. : sentimentData.sentimentProperties[0].level;
  146. int conFigId1 = sentimentData.sentimentProperties[0].groupId * 10 + level1;
  147. var sentimentEffectConfig1 = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId1);
  148. if (_titlePanel == null)
  149. {
  150. _titlePanel = await TitlePanel.OpenPanel(new List<int>() { sentimentEffectConfig1.upConstItemId });
  151. }
  152. else
  153. {
  154. _titlePanel.CustomInit(new List<int>() { sentimentEffectConfig1.upConstItemId });
  155. }
  156. return await base.AsyncInit(uiData);
  157. }
  158. public async override CTask Show()
  159. {
  160. await base.Show();
  161. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  162. {
  163. UIManager.Instance.DormancyGComponent(sentimentEffectWidget);
  164. }
  165. sentimentEffectWidgets.Clear();
  166. foreach (var sentimentDataSentimentProperty in sentimentData.sentimentProperties)
  167. {
  168. int level = sentimentDataSentimentProperty.level <= 0 ? 1 : sentimentDataSentimentProperty.level;
  169. int conFigId = sentimentDataSentimentProperty.groupId * 10 + level;
  170. var sentimentEffectConfig = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  171. int index = MapNumber(sentimentEffectConfig.pos);
  172. SentimentEffectWidget sentimentEffectWidget1 =
  173. await UIManager.Instance.CreateGComponent<SentimentEffectWidget>(null, Root[index]);
  174. sentimentEffectWidget1.CustomInit(sentimentDataSentimentProperty);
  175. sentimentEffectWidget1.OnClick = OnClick;
  176. sentimentEffectWidgets.Add(sentimentEffectWidget1);
  177. if (currentSentimentEffectWidget == null)
  178. {
  179. sentimentEffectWidget1.OnPointerClick();
  180. }
  181. }
  182. UpdateRestBtn();
  183. foreach (var rectTransform in Root)
  184. {
  185. LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
  186. }
  187. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  188. {
  189. int level = sentimentEffectWidget.sentimentProperty.level <= 0
  190. ? 1
  191. : sentimentEffectWidget.sentimentProperty.level;
  192. int conFigId = sentimentEffectWidget.sentimentProperty.groupId * 10 + level;
  193. var sentimentEffectConfig = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  194. SentimentEffectWidget sentimentEffectWidget1 = null;
  195. if (sentimentEffectConfig.lastSentimentEffectId == -1)
  196. {
  197. sentimentEffectWidget1 = mainSentimentEffectWidget;
  198. }
  199. else
  200. {
  201. sentimentEffectWidget1 = sentimentEffectWidgets.FirstOrDefault(s =>
  202. s.sentimentEffectConfig.groupId == sentimentEffectConfig.lastSentimentEffectId);
  203. }
  204. sentimentEffectWidget.CreatXian(XianRoot, sentimentEffectWidget1);
  205. }
  206. }
  207. private void UpdateRestBtn()
  208. {
  209. bool isCanRest = false;
  210. foreach (var sentimentDataSentimentProperty in sentimentData.sentimentProperties)
  211. {
  212. if (sentimentDataSentimentProperty.level >= 1)
  213. {
  214. isCanRest = true;
  215. }
  216. }
  217. Btn_Rest.gameObject.SetActive(isCanRest);
  218. }
  219. private async void UpdateUi()
  220. {
  221. int level = curretnSentimentProperty.level <= 0 ? 1 : curretnSentimentProperty.level;
  222. int conFigId = curretnSentimentProperty.groupId * 10 + level;
  223. SentimentEffectConfig sentimentEffectConfig = ConfigComponent.Instance.Get<SentimentEffectConfig>(conFigId);
  224. currentGroupSentimentEffectConfigs = _sentimentEffectConfigs
  225. .Where(se => se.groupId == sentimentEffectConfig.groupId).ToList();
  226. Text_Name.text = LanguageManager.Instance.Text(sentimentEffectConfig.name);
  227. Text_Desc.text = UtilTools.GetString(LanguageManager.Instance.Text(sentimentEffectConfig.massge),
  228. sentimentEffectConfig.effectVale);
  229. UIManager.Instance.DormancyGComponent(_itemWidgetType1);
  230. _itemWidgetType1 = null;
  231. _itemWidgetType1 =
  232. await UIManager.Instance.CreateGComponentForObject<ItemWidgetType1>(ItemWidgetType1Gam, null);
  233. _itemWidgetType1.CustomInit(sentimentEffectConfig.upConstItemId, sentimentEffectConfig.upConstCount);
  234. if (curretnSentimentProperty.level >= currentGroupSentimentEffectConfigs.Count)
  235. {
  236. Text_CurrentLevel.text = $"{curretnSentimentProperty.level}级 ";
  237. Text_NextLevel.text = $"MAX级";
  238. }
  239. else
  240. {
  241. Text_CurrentLevel.text = $"{curretnSentimentProperty.level}级 ";
  242. Text_NextLevel.text = $"{curretnSentimentProperty.level + 1}级";
  243. }
  244. }
  245. private void OnClick(ItemWidgetBasic obj)
  246. {
  247. SentimentEffectWidget sentimentEffectWidget = obj as SentimentEffectWidget;
  248. currentSentimentEffectWidget = sentimentEffectWidget;
  249. curretnSentimentProperty = sentimentEffectWidget.sentimentProperty;
  250. Text_EffectName.text = LanguageManager.Instance.Text(sentimentEffectWidget.sentimentEffectConfig.name);
  251. UpdateUi();
  252. }
  253. public static async CTask OpenPanel(AccountFileInfo.SentimentData sentimentData)
  254. {
  255. await UIManager.Instance.LoadAndOpenPanel<SentimentInfoPanel>(null, uiData: new object[] { sentimentData });
  256. }
  257. public async override CTask Close()
  258. {
  259. foreach (var sentimentEffectWidget in sentimentEffectWidgets)
  260. {
  261. UIManager.Instance.DormancyGComponent(sentimentEffectWidget);
  262. }
  263. sentimentEffectWidgets.Clear();
  264. currentSentimentEffectWidget = null;
  265. curretnSentimentProperty = null;
  266. // UIManager.Instance.DormancyGComponent(energyWidget);
  267. // energyWidget = null;
  268. await base.Close();
  269. }
  270. }
  271. }