DockConsoleController.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. namespace SRDebugger.UI.Other
  2. {
  3. using Controls;
  4. using Internal;
  5. using Services;
  6. using SRF;
  7. using UnityEngine;
  8. using UnityEngine.EventSystems;
  9. using UnityEngine.UI;
  10. public class DockConsoleController : SRMonoBehaviourEx, IPointerEnterHandler, IPointerExitHandler
  11. {
  12. public const float NonFocusOpacity = 0.65f;
  13. private bool _isDirty;
  14. private bool _isDragging;
  15. private int _pointersOver;
  16. [Import]
  17. public IConsoleFilterState FilterState;
  18. [RequiredField] public GameObject BottomHandle;
  19. [RequiredField] public CanvasGroup CanvasGroup;
  20. [RequiredField] public ConsoleLogControl Console;
  21. [RequiredField] public GameObject Dropdown;
  22. [RequiredField] public Image DropdownToggleSprite;
  23. [RequiredField] public Text TextErrors;
  24. [RequiredField] public Text TextInfo;
  25. [RequiredField] public Text TextWarnings;
  26. [RequiredField] public Toggle ToggleErrors;
  27. [RequiredField] public Toggle ToggleInfo;
  28. [RequiredField] public Toggle ToggleWarnings;
  29. [RequiredField] public GameObject TopBar;
  30. [RequiredField] public GameObject TopHandle;
  31. [RequiredField] public GameObject TopSafeAreaSpacer;
  32. [RequiredField] public GameObject BottomSafeAreaSpacer;
  33. public bool IsVisible
  34. {
  35. get { return CachedGameObject.activeSelf; }
  36. set { CachedGameObject.SetActive(value); }
  37. }
  38. protected override void Start()
  39. {
  40. base.Start();
  41. //_canvasScaler = Canvas.GetComponent<CanvasScaler>();
  42. Service.Console.Updated += ConsoleOnUpdated;
  43. ToggleErrors.isOn = FilterState.GetConsoleFilterState(LogType.Error);
  44. ToggleWarnings.isOn = FilterState.GetConsoleFilterState(LogType.Warning);
  45. ToggleInfo.isOn = FilterState.GetConsoleFilterState(LogType.Log);
  46. ToggleErrors.onValueChanged.AddListener(isOn =>
  47. {
  48. FilterState.SetConsoleFilterState(LogType.Error, isOn);
  49. _isDirty = true;
  50. });
  51. ToggleWarnings.onValueChanged.AddListener(isOn =>
  52. {
  53. FilterState.SetConsoleFilterState(LogType.Warning, isOn);
  54. _isDirty = true;
  55. });
  56. ToggleInfo.onValueChanged.AddListener(isOn =>
  57. {
  58. FilterState.SetConsoleFilterState(LogType.Log, isOn);
  59. _isDirty = true;
  60. });
  61. FilterState.FilterStateChange += OnFilterStateChange;
  62. Refresh();
  63. RefreshAlpha();
  64. }
  65. protected override void OnDestroy()
  66. {
  67. base.OnDestroy();
  68. if (Service.Console != null)
  69. {
  70. Service.Console.Updated -= ConsoleOnUpdated;
  71. }
  72. FilterState.FilterStateChange -= OnFilterStateChange;
  73. }
  74. protected override void OnEnable()
  75. {
  76. base.OnEnable();
  77. _pointersOver = 0;
  78. _isDragging = false;
  79. RefreshAlpha();
  80. }
  81. protected override void OnDisable()
  82. {
  83. base.OnDisable();
  84. _pointersOver = 0;
  85. }
  86. protected override void Update()
  87. {
  88. base.Update();
  89. if (_isDirty)
  90. {
  91. Refresh();
  92. }
  93. }
  94. private void OnFilterStateChange(LogType logType, bool newState)
  95. {
  96. switch (logType)
  97. {
  98. case LogType.Error:
  99. ToggleErrors.isOn = newState;
  100. break;
  101. case LogType.Warning:
  102. ToggleWarnings.isOn = newState;
  103. break;
  104. case LogType.Log:
  105. ToggleInfo.isOn = newState;
  106. break;
  107. }
  108. }
  109. private void ConsoleOnUpdated(IConsoleService console)
  110. {
  111. _isDirty = true;
  112. }
  113. public void SetDropdownVisibility(bool visible)
  114. {
  115. Dropdown.SetActive(visible);
  116. DropdownToggleSprite.rectTransform.localRotation = Quaternion.Euler(0, 0, visible ? 0f : 180f);
  117. }
  118. public void SetAlignmentMode(ConsoleAlignment alignment)
  119. {
  120. switch (alignment)
  121. {
  122. case ConsoleAlignment.Top:
  123. {
  124. TopBar.transform.SetSiblingIndex(0);
  125. Dropdown.transform.SetSiblingIndex(2);
  126. TopHandle.SetActive(false);
  127. BottomHandle.SetActive(true);
  128. transform.SetSiblingIndex(0);
  129. DropdownToggleSprite.rectTransform.parent.localRotation = Quaternion.Euler(0, 0, 0f);
  130. TopSafeAreaSpacer.SetActive(true);
  131. BottomSafeAreaSpacer.SetActive(false);
  132. break;
  133. }
  134. case ConsoleAlignment.Bottom:
  135. {
  136. Dropdown.transform.SetSiblingIndex(0);
  137. TopBar.transform.SetSiblingIndex(2);
  138. TopHandle.SetActive(true);
  139. BottomHandle.SetActive(false);
  140. transform.SetSiblingIndex(1);
  141. DropdownToggleSprite.rectTransform.parent.localRotation = Quaternion.Euler(0, 0, 180f);
  142. TopSafeAreaSpacer.SetActive(false);
  143. BottomSafeAreaSpacer.SetActive(true);
  144. break;
  145. }
  146. }
  147. }
  148. private void Refresh()
  149. {
  150. // Update total counts labels
  151. TextInfo.text = SRDebuggerUtil.GetNumberString(Service.Console.InfoCount, 999, "999+");
  152. TextWarnings.text = SRDebuggerUtil.GetNumberString(Service.Console.WarningCount, 999, "999+");
  153. TextErrors.text = SRDebuggerUtil.GetNumberString(Service.Console.ErrorCount, 999, "999+");
  154. ToggleErrors.isOn = FilterState.GetConsoleFilterState(LogType.Error);
  155. ToggleWarnings.isOn = FilterState.GetConsoleFilterState(LogType.Warning);
  156. ToggleInfo.isOn = FilterState.GetConsoleFilterState(LogType.Log);
  157. _isDirty = false;
  158. }
  159. private void RefreshAlpha()
  160. {
  161. if (_isDragging || _pointersOver > 0)
  162. {
  163. CanvasGroup.alpha = 1.0f;
  164. }
  165. else
  166. {
  167. CanvasGroup.alpha = NonFocusOpacity;
  168. }
  169. }
  170. #region Event Callbacks
  171. public void ToggleDropdownVisible()
  172. {
  173. SetDropdownVisibility(!Dropdown.activeSelf);
  174. }
  175. public void MenuButtonPressed()
  176. {
  177. SRDebug.Instance.ShowDebugPanel(DefaultTabs.Console);
  178. }
  179. public void ClearButtonPressed()
  180. {
  181. Service.Console.Clear();
  182. }
  183. public void TogglesUpdated()
  184. {
  185. Console.ShowErrors = ToggleErrors.isOn;
  186. Console.ShowWarnings = ToggleWarnings.isOn;
  187. Console.ShowInfo = ToggleInfo.isOn;
  188. SetDropdownVisibility(true);
  189. }
  190. public void OnPointerEnter(PointerEventData e)
  191. {
  192. _pointersOver = 1;
  193. RefreshAlpha();
  194. }
  195. public void OnPointerExit(PointerEventData e)
  196. {
  197. _pointersOver = 0; //Mathf.Max(0, _pointersOver - 1);
  198. RefreshAlpha();
  199. }
  200. public void OnBeginDrag()
  201. {
  202. _isDragging = true;
  203. RefreshAlpha();
  204. }
  205. public void OnEndDrag()
  206. {
  207. _isDragging = false;
  208. _pointersOver = 0;
  209. RefreshAlpha();
  210. }
  211. #endregion
  212. }
  213. }