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(); 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; } } } }