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
 | 
						|
    }
 | 
						|
}
 |