ToolItemPrefab.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. /****************************************************************************
  2. * 2024.7 LXD
  3. ****************************************************************************/
  4. using System.Collections;
  5. using System;
  6. using System.Collections.Generic;
  7. using UnityEngine;
  8. using UnityEngine.UI;
  9. using QFramework;
  10. using I2.Loc;
  11. using DG.Tweening;
  12. using UniRx.Triggers;
  13. using UnityEngine.EventSystems;
  14. namespace QFramework
  15. {
  16. public partial class ToolItemPrefab : UIElement
  17. {
  18. public GameObject m_NormalState;
  19. public GameObject m_HighterState;
  20. public GameObject m_SelectState;
  21. public GameObject m_PromptState;
  22. public ToolConfigInfo m_ToolConfigInfo;
  23. private UnityEngine.Coroutine m_Coroutine;
  24. private BtnState m_CurrentBtnState;
  25. private void Start()
  26. {
  27. GetComponent<Button>().onClick.AddListener(OnToolButtonClick);
  28. }
  29. private IObservable<BaseEventData> OnSelect()
  30. {
  31. throw new NotImplementedException();
  32. }
  33. public void SetData(ToolConfigInfo toolConfigInfo)
  34. {
  35. m_ToolConfigInfo = toolConfigInfo;
  36. ToolLibraryForm toolLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
  37. if (toolLibraryForm.m_CurrentSelectToolIDs.Contains(int.Parse(m_ToolConfigInfo.id)))
  38. {
  39. SetButtonState(BtnState.select);
  40. }
  41. else
  42. {
  43. SetButtonState(BtnState.normal);
  44. }
  45. SetToolIcon();
  46. ToolName.text = toolConfigInfo.toolName;
  47. #region 多语言
  48. if (LocalizationConfig.localization && LocalizationManager.CurrentLanguage == "English")
  49. {
  50. ToolName.text = toolConfigInfo.en_toolName;
  51. }
  52. #endregion
  53. //如果已经选择
  54. if (toolLibraryForm.m_CurrentSelectToolIDs.Contains(int.Parse(m_ToolConfigInfo.id)))
  55. {
  56. SetButtonState(BtnState.select);
  57. }
  58. //如果打开提示
  59. if (OperateSetting.Instance.ToolPackUILogic.GetHint())
  60. {
  61. if (GetIsNeedHighter() && m_CurrentBtnState != BtnState.select)
  62. {
  63. ShowHighter(true);
  64. }
  65. }
  66. }
  67. /// <summary>
  68. /// 工具点击
  69. /// </summary>
  70. public void OnToolButtonClick()
  71. {
  72. ToolLibraryForm toolLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
  73. toolLibraryForm?.ToolMessageElement.ShowToolInfo(m_ToolConfigInfo);
  74. if (toolLibraryForm.m_CurrentSelectToolIDs.Contains(int.Parse(m_ToolConfigInfo.id)))
  75. {
  76. toolLibraryForm.m_CurrentSelectToolIDs.Remove(int.Parse(m_ToolConfigInfo.id));
  77. SetButtonState(BtnState.normal);
  78. if (OperateSetting.Instance.ToolPackUILogic.GetHint())
  79. {
  80. if (GetIsNeedHighter())
  81. {
  82. ShowHighter(true);
  83. }
  84. }
  85. }
  86. else
  87. {
  88. toolLibraryForm.m_CurrentSelectToolIDs.Add(int.Parse(m_ToolConfigInfo.id));
  89. if (OperateSetting.Instance.ToolPackUILogic.GetHint())
  90. {
  91. ShowHighter(false);
  92. }
  93. SetButtonState(BtnState.select);
  94. }
  95. }
  96. public void SetShowToolInfo()
  97. {
  98. ToolLibraryForm toolLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
  99. toolLibraryForm?.ToolMessageElement.ShowToolInfo(m_ToolConfigInfo);
  100. }
  101. /// <summary>
  102. /// 设置工具Icon
  103. /// </summary>
  104. private void SetToolIcon()
  105. {
  106. ToolConfigProxy toolConfigProxy = DAL.Instance.Get<ToolConfigProxy>();
  107. ToolIcon.sprite = toolConfigProxy.GetSpriteByToolName(m_ToolConfigInfo.toolName);
  108. }
  109. public void OnPointEnter()
  110. {
  111. if (SelectState.gameObject.activeSelf) return;
  112. SetButtonState(BtnState.highter);
  113. }
  114. public void OnPointExit()
  115. {
  116. if (SelectState.gameObject.activeSelf) return;
  117. SetButtonState(BtnState.normal);
  118. }
  119. public void SetButtonState(BtnState btnState)
  120. {
  121. switch (btnState)
  122. {
  123. case BtnState.normal:
  124. NormalState.gameObject.SetActive(true);
  125. SelectState.gameObject.SetActive(false);
  126. HighterState.gameObject.SetActive(false);
  127. break;
  128. case BtnState.highter:
  129. NormalState.gameObject.SetActive(false);
  130. SelectState.gameObject.SetActive(false);
  131. HighterState.gameObject.SetActive(true);
  132. break;
  133. case BtnState.select:
  134. NormalState.gameObject.SetActive(false);
  135. SelectState.gameObject.SetActive(true);
  136. HighterState.gameObject.SetActive(false);
  137. break;
  138. default:
  139. break;
  140. }
  141. m_CurrentBtnState = btnState;
  142. }
  143. public void ShowHighter(bool highter, Action callBack = null)
  144. {
  145. if (highter)
  146. {
  147. PromptIcon.gameObject.SetActive(true);
  148. PromptIcon.rectTransform.DOSizeDelta(new Vector2(201, 220), 1).SetLoops(-1, LoopType.Yoyo);
  149. }
  150. else
  151. {
  152. PromptIcon.gameObject.SetActive(false);
  153. PromptIcon.rectTransform.sizeDelta = new Vector2(193, 213);
  154. PromptIcon.rectTransform.DOKill();
  155. }
  156. }
  157. private bool GetIsNeedHighter()
  158. {
  159. ToolLibraryForm tmpToolLibraryForm = UIKit.GetPanel<ToolLibraryForm>();
  160. return tmpToolLibraryForm.ToolLibrarySelectElement.ToolItemIsNeedShowHighter(m_ToolConfigInfo.id);
  161. }
  162. IEnumerator IEShowHighter(Action callBack = null)
  163. {
  164. while (true)
  165. {
  166. yield return new WaitForSeconds(0.5f);
  167. SetButtonState(BtnState.highter);
  168. yield return new WaitForSeconds(0.5f);
  169. SetButtonState(BtnState.normal);
  170. callBack?.Invoke();
  171. }
  172. }
  173. }
  174. }