149 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.1 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;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |