You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
5.9 KiB
C#
218 lines
5.9 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;
|
|
|
|
[RequiredField] public GameObject TopSafeAreaSpacer;
|
|
[RequiredField] public GameObject BottomSafeAreaSpacer;
|
|
|
|
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);
|
|
TopSafeAreaSpacer.SetActive(true);
|
|
BottomSafeAreaSpacer.SetActive(false);
|
|
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);
|
|
TopSafeAreaSpacer.SetActive(false);
|
|
BottomSafeAreaSpacer.SetActive(true);
|
|
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
|
|
}
|
|
}
|