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/Services/Implementation/DockConsoleServiceImpl.cs

149 lines
4.0 KiB
C#

namespace SRDebugger.Services.Implementation
{
using Internal;
using SRF.Service;
using UI.Other;
using UnityEngine;
[Service(typeof (IDockConsoleService))]
public class DockConsoleServiceImpl : IDockConsoleService
{
private ConsoleAlignment _alignment;
private DockConsoleController _consoleRoot;
private bool _didSuspendTrigger;
private bool _isExpanded = true;
private bool _isVisible;
public DockConsoleServiceImpl()
{
_alignment = Settings.Instance.ConsoleAlignment;
}
public bool IsVisible
{
get { return _isVisible; }
set
{
if (value == _isVisible)
{
return;
}
_isVisible = value;
if (_consoleRoot == null && value)
{
Load();
}
else
{
_consoleRoot.CachedGameObject.SetActive(value);
}
CheckTrigger();
}
}
public bool IsExpanded
{
get { return _isExpanded; }
set
{
if (value == _isExpanded)
{
return;
}
_isExpanded = value;
if (_consoleRoot == null && value)
{
Load();
}
else
{
_consoleRoot.SetDropdownVisibility(value);
}
CheckTrigger();
}
}
public ConsoleAlignment Alignment
{
get { return _alignment; }
set
{
_alignment = value;
if (_consoleRoot != null)
{
_consoleRoot.SetAlignmentMode(value);
}
CheckTrigger();
}
}
private void Load()
{
var dockService = SRServiceManager.GetService<IPinnedUIService>();
if (dockService == null)
{
Debug.LogError("[DockConsoleService] PinnedUIService not found");
return;
}
var pinService = dockService as PinnedUIServiceImpl;
if (pinService == null)
{
Debug.LogError("[DockConsoleService] Expected IPinnedUIService to be PinnedUIServiceImpl");
return;
}
_consoleRoot = pinService.DockConsoleController;
_consoleRoot.SetDropdownVisibility(_isExpanded);
_consoleRoot.IsVisible = _isVisible;
_consoleRoot.SetAlignmentMode(_alignment);
CheckTrigger();
}
private void CheckTrigger()
{
ConsoleAlignment? triggerAlignment = null;
var pinAlignment = Service.Trigger.Position;
if (pinAlignment == PinAlignment.TopLeft ||
pinAlignment == PinAlignment.TopRight || pinAlignment == PinAlignment.TopCenter)
{
triggerAlignment = ConsoleAlignment.Top;
} else if (pinAlignment == PinAlignment.BottomLeft ||
pinAlignment == PinAlignment.BottomRight ||
pinAlignment == PinAlignment.BottomCenter)
{
triggerAlignment = ConsoleAlignment.Bottom;
}
var shouldHide = triggerAlignment.HasValue && IsVisible && Alignment == triggerAlignment.Value;
// Show trigger if we have hidden it, and we no longer need to hide it.
if (_didSuspendTrigger && !shouldHide)
{
Service.Trigger.IsEnabled = true;
_didSuspendTrigger = false;
}
else if (Service.Trigger.IsEnabled && shouldHide)
{
Service.Trigger.IsEnabled = false;
_didSuspendTrigger = true;
}
}
}
}