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