211 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			211 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | namespace SRDebugger.UI.Other | |||
|  | { | |||
|  |     using Controls; | |||
|  |     using Internal; | |||
|  |     using Services; | |||
|  |     using SRF; | |||
|  |     using UnityEngine; | |||
|  |     using UnityEngine.EventSystems; | |||
|  |     using UnityEngine.UI; | |||
|  | 
 | |||
|  |     public class DockConsoleController : SRMonoBehaviourEx, IPointerEnterHandler, IPointerExitHandler | |||
|  |     { | |||
|  |         public const float NonFocusOpacity = 0.65f; | |||
|  |         private bool _isDirty; | |||
|  |         private bool _isDragging; | |||
|  |         private int _pointersOver; | |||
|  | 
 | |||
|  |         [RequiredField] public GameObject BottomHandle; | |||
|  | 
 | |||
|  |         [RequiredField] public CanvasGroup CanvasGroup; | |||
|  | 
 | |||
|  |         [RequiredField] public ConsoleLogControl Console; | |||
|  | 
 | |||
|  |         [RequiredField] public GameObject Dropdown; | |||
|  | 
 | |||
|  |         [RequiredField] public Image DropdownToggleSprite; | |||
|  | 
 | |||
|  |         [RequiredField] public Text TextErrors; | |||
|  | 
 | |||
|  |         [RequiredField] public Text TextInfo; | |||
|  | 
 | |||
|  |         [RequiredField] public Text TextWarnings; | |||
|  | 
 | |||
|  |         [RequiredField] public Toggle ToggleErrors; | |||
|  | 
 | |||
|  |         [RequiredField] public Toggle ToggleInfo; | |||
|  | 
 | |||
|  |         [RequiredField] public Toggle ToggleWarnings; | |||
|  | 
 | |||
|  |         [RequiredField] public GameObject TopBar; | |||
|  | 
 | |||
|  |         [RequiredField] public GameObject TopHandle; | |||
|  | 
 | |||
|  |         public bool IsVisible | |||
|  |         { | |||
|  |             get { return CachedGameObject.activeSelf; } | |||
|  |             set { CachedGameObject.SetActive(value); } | |||
|  |         } | |||
|  | 
 | |||
|  |         protected override void Start() | |||
|  |         { | |||
|  |             base.Start(); | |||
|  | 
 | |||
|  |             //_canvasScaler = Canvas.GetComponent<CanvasScaler>(); | |||
|  |             Service.Console.Updated += ConsoleOnUpdated; | |||
|  | 
 | |||
|  |             Refresh(); | |||
|  |             RefreshAlpha(); | |||
|  |         } | |||
|  | 
 | |||
|  |         protected override void OnDestroy() | |||
|  |         { | |||
|  |             base.OnDestroy(); | |||
|  | 
 | |||
|  |             if (Service.Console != null) | |||
|  |             { | |||
|  |                 Service.Console.Updated -= ConsoleOnUpdated; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         protected override void OnEnable() | |||
|  |         { | |||
|  |             base.OnEnable(); | |||
|  | 
 | |||
|  |             _pointersOver = 0; | |||
|  |             _isDragging = false; | |||
|  |             RefreshAlpha(); | |||
|  |         } | |||
|  | 
 | |||
|  |         protected override void OnDisable() | |||
|  |         { | |||
|  |             base.OnDisable(); | |||
|  |             _pointersOver = 0; | |||
|  |         } | |||
|  | 
 | |||
|  |         protected override void Update() | |||
|  |         { | |||
|  |             base.Update(); | |||
|  | 
 | |||
|  |             if (_isDirty) | |||
|  |             { | |||
|  |                 Refresh(); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         private void ConsoleOnUpdated(IConsoleService console) | |||
|  |         { | |||
|  |             _isDirty = true; | |||
|  |         } | |||
|  | 
 | |||
|  |         public void SetDropdownVisibility(bool visible) | |||
|  |         { | |||
|  |             Dropdown.SetActive(visible); | |||
|  |             DropdownToggleSprite.rectTransform.localRotation = Quaternion.Euler(0, 0, visible ? 0f : 180f); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void SetAlignmentMode(ConsoleAlignment alignment) | |||
|  |         { | |||
|  |             switch (alignment) | |||
|  |             { | |||
|  |                 case ConsoleAlignment.Top: | |||
|  |                 { | |||
|  |                     TopBar.transform.SetSiblingIndex(0); | |||
|  |                     Dropdown.transform.SetSiblingIndex(2); | |||
|  |                     TopHandle.SetActive(false); | |||
|  |                     BottomHandle.SetActive(true); | |||
|  |                     transform.SetSiblingIndex(0); | |||
|  |                     DropdownToggleSprite.rectTransform.parent.localRotation = Quaternion.Euler(0, 0, 0f); | |||
|  |                     break; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 case ConsoleAlignment.Bottom: | |||
|  |                 { | |||
|  |                     Dropdown.transform.SetSiblingIndex(0); | |||
|  |                     TopBar.transform.SetSiblingIndex(2); | |||
|  |                     TopHandle.SetActive(true); | |||
|  |                     BottomHandle.SetActive(false); | |||
|  |                     transform.SetSiblingIndex(1); | |||
|  |                     DropdownToggleSprite.rectTransform.parent.localRotation = Quaternion.Euler(0, 0, 180f); | |||
|  |                     break; | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         private void Refresh() | |||
|  |         { | |||
|  |             // Update total counts labels | |||
|  |             TextInfo.text = SRDebuggerUtil.GetNumberString(Service.Console.InfoCount, 999, "999+"); | |||
|  |             TextWarnings.text = SRDebuggerUtil.GetNumberString(Service.Console.WarningCount, 999, "999+"); | |||
|  |             TextErrors.text = SRDebuggerUtil.GetNumberString(Service.Console.ErrorCount, 999, "999+"); | |||
|  | 
 | |||
|  |             _isDirty = false; | |||
|  |         } | |||
|  | 
 | |||
|  |         private void RefreshAlpha() | |||
|  |         { | |||
|  |             if (_isDragging || _pointersOver > 0) | |||
|  |             { | |||
|  |                 CanvasGroup.alpha = 1.0f; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 CanvasGroup.alpha = NonFocusOpacity; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         #region Event Callbacks | |||
|  | 
 | |||
|  |         public void ToggleDropdownVisible() | |||
|  |         { | |||
|  |             SetDropdownVisibility(!Dropdown.activeSelf); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void MenuButtonPressed() | |||
|  |         { | |||
|  |             SRDebug.Instance.ShowDebugPanel(DefaultTabs.Console); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void ClearButtonPressed() | |||
|  |         { | |||
|  |             Service.Console.Clear(); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void TogglesUpdated() | |||
|  |         { | |||
|  |             Console.ShowErrors = ToggleErrors.isOn; | |||
|  |             Console.ShowWarnings = ToggleWarnings.isOn; | |||
|  |             Console.ShowInfo = ToggleInfo.isOn; | |||
|  | 
 | |||
|  |             SetDropdownVisibility(true); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void OnPointerEnter(PointerEventData e) | |||
|  |         { | |||
|  |             _pointersOver = 1; | |||
|  |             RefreshAlpha(); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void OnPointerExit(PointerEventData e) | |||
|  |         { | |||
|  |             _pointersOver = 0; //Mathf.Max(0, _pointersOver - 1); | |||
|  |             RefreshAlpha(); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void OnBeginDrag() | |||
|  |         { | |||
|  |             _isDragging = true; | |||
|  |             RefreshAlpha(); | |||
|  |         } | |||
|  | 
 | |||
|  |         public void OnEndDrag() | |||
|  |         { | |||
|  |             _isDragging = false; | |||
|  |             _pointersOver = 0; | |||
|  |             RefreshAlpha(); | |||
|  |         } | |||
|  | 
 | |||
|  |         #endregion | |||
|  |     } | |||
|  | } |