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.
CrowdControl/Assets/3rd/StompyRobot/SRDebugger/Scripts/UI/Other/DockConsoleController.cs

218 lines
5.9 KiB
C#

2 months ago
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
}
}